luckyjayce / viewpagerindicator Goto Github PK
View Code? Open in Web Editor NEWIndicator 取代 tabhost,实现网易顶部tab,新浪微博主页底部tab,引导页,无限轮播banner等效果,高度自定义tab和特效,LazyFragment
License: Apache License 2.0
Indicator 取代 tabhost,实现网易顶部tab,新浪微博主页底部tab,引导页,无限轮播banner等效果,高度自定义tab和特效,LazyFragment
License: Apache License 2.0
Hello, 用了这个作为主TAB界面,但是如果TAB中的Fragment被回收了怎么恢复呢?目前运行程序,将将它放到后台,然后用adb shell kill -9 pid 去模仿它被回收的情况,结果重新点击应用进去的话,会出现其它tab白屏的现象。求支招呀。
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:682)
at com.shizhefei.view.indicator.FragmentListPageAdapter.restoreState(FragmentListPageAdapter.java:203)
at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1448)
at android.view.View.dispatchRestoreInstanceState(View.java:13788)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2889)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2897)
at android.view.View.restoreHierarchyState(View.java:13766)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:475)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1131)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:532)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5601)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
请问是什么问题?
Error:Execution failed for task ':zhongshengpreferred:transformClassesWithJarMergingForDebug'.
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/shizhefei/indicator/BuildConfig.class
不知道为什么就会出这种问题 之前编译还是正常的 现在打开运行项目就出现这个问题 应该是包冲突了 我移除v4包还是会有这个问题
如何将下划线和文字宽度保持一致,看了源码没找到修改方法
-keep class com.shizhefei.** { *;} -dontwarn com.shizhefei.view.indicator.RecyclerIndicatorView
使用了上面的规则后,能够打出release 版本,但是运行时会导致
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.greenteam.snackshopping/com.greenteam.snackshopping.activity.main.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.shizhefei.view.indicator.Indicator.setItemClickable(boolean)' on a null object reference
想让底部滑块的宽度适应标题的宽度,项数少的时候,看起来好看一点
。。。
viewPager = (ViewPager)findViewById(R.id.viewPager);
indicator = (Indicator)findViewById(R.id.indicator);
// 将viewPager和indicator使用
bannerComponent = new BannerComponent(indicator, viewPager, true);
inflater = LayoutInflater.from(getApplicationContext());
adapter = new IndicatorViewPager.IndicatorViewPagerAdapter() {
//......
};
// 设置indicatorViewPager的适配器
bannerComponent.setAdapter(adapter);
bannerComponent.setAutoPlayTime(2000);
bannerComponent.startAutoPlay();
模拟器在卡顿1分钟左右之后(有时会报ANR),出现轮播。。
真机一直显示空白。
两个的cpu使用率基本在40% ++
android:supportsRtl="true",由于你这里设置了,导致引用你的库后,想要设置android:supportsRtl="false"就会报错。。。宝宝不开心了。。。测试的又打开了开发者模式下的强制从右到左测试。。。。
if (selectColor != -1 && unSelectColor != -1) {
selectTextView.setTextColor(gradient.getColor((int) (selectPercent * 100)));
}
貌似#ffffff的值是-1,就不会触发这里
IndicatorViewPager.IndicatorViewPagerAdapter
里面的view为imageview时(其他的没试过),imageview会挡住viewpager的indicator,但不会超出viewpager的大小.
hello,
在demo的moretab->MoreTabActivity中,在设置tab indicator时,如果把tab_top的TextView外加一层RelativeLayout或LinearLayout时,程序直接crash掉
if (convertView == null) {
convertView = inflate.inflate(R.layout.tab_top, container, false);
}
TextView textView = (TextView) convertView.findViewById(R.id.tab);
java.lang.StackOverflowError: stack size 8MB
at com.shizhefei.view.indicator.IndicatorViewPager$IndicatorViewPagerAdapter$1.getCount(IndicatorViewPager.java:277)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:636)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:632)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:624)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:108)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.in
hi 我想讲底部的tab ,主页,消息,发现,我,这个做成透明的,只保留图标和文字,这个怎么实现呢
BannerComponent使用SpringBar移到最后一个时有显示不全,并且下标为0的Indicator会显示一半的SpringBar。在item的数量为3个的时候.
不知道什么原因,如果内存不足时,应用程序有些activity被回收了,可能会导致有些tab白屏,急啊。
java.lang.NullPointerException
at com.shizhefei.view.indicator.FragmentListPageAdapter.instantiateItem(FragmentListPageAdapter.java:139)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1034)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1182)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
at android.view.View.measure(View.java:15523)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
at android.view.View.measure(View.java:15523)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4357)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
java.lang.NoSuchMethodError:
No virtual method addOnPageChangeListener(Landroid/support/v4/view/ViewPager$OnPageChangeListener;)V in class Landroid/support/v4/view/ViewPager;
or its super classes (declaration of 'android.support.v4.view.ViewPager' appears in /data/data/com.weijie.ckapp/files/instant-run/dex/slice-support-v4-r7_6b487e8b8eac5541972e73dc0c160b63dd97c123-classes.dex)
at com.shizhefei.view.indicator.IndicatorViewPager.iniOnPageChangeListener(IndicatorViewPager.java:71)
at com.shizhefei.view.indicator.IndicatorViewPager.(IndicatorViewPager.java:53)
at com.shizhefei.view.indicator.IndicatorViewPager.(IndicatorViewPager.java:43)
还有,如何改选中和不选中的文字字体的大小。
例如demo里面的tab主界面这个测试例子,现在是外层有4个tab,然后每个tab里面嵌套的是几个viewpager,如果改为嵌套的fragment的话,会发现外层的第一个tab里面的tab是正常的,但是第二个tab里面的tab就有问题了,感觉好像只能实例一个。是否是这种嵌套本身就有问题?
界面是fragment适配器要怎么写
打开开发者模式->GPU呈现模式分析>在屏幕上显示为线型图
然后打开viewpagerindicator 这个demo, 点击不同的的TAB时,会发现GPU一直在重绘,这样会很耗电的
自定义adapter继承自IndicatorViewPager.IndicatorViewPagerAdapter.
应用的情景中getViewForPage方法里面返回的View是依赖于数据源的,而更新数据源后那个View不会立刻进行更新,即使是调用了notifyDataSetChanged(),个人觉得这样不符合实际应用情况.请问有没有解决方法?
java.lang.NullPointerException: Attempt to invoke interface method 'void com.shizhefei.view.indicator.Indicator.setItemClickable(boolean)' on a null object reference
at com.shizhefei.view.indicator.IndicatorViewPager.<init>(IndicatorViewPager.java:50)
at com.shizhefei.view.indicator.IndicatorViewPager.<init>(IndicatorViewPager.java:43)
我切换成1.1.4版本后,初始化时抛出NullPointerException
关键代码:
viewPager = (ViewPager) findViewById(R.id.viewpager);
indicatorViewPager = new IndicatorViewPager(indicatorView, viewPager);
indicatorView.setScrollBar(new ColorBar(this, Color.BLUE, 5));
indicatorViewPager.setPageOffscreenLimit(2);
异常:
java.lang.NullPointerException
at com.shizhefei.view.indicator.FixedIndicatorView.measureScrollBar(FixedIndicatorView.java:499)
at com.shizhefei.view.indicator.FixedIndicatorView.onSizeChanged(FixedIndicatorView.java:564)
at android.view.View.sizeChange(View.java:14993)
at android.view.View.setFrame(View.java:14966)
at android.view.View.layout(View.java:14874)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.HorizontalScrollView.onLayout(HorizontalScrollView.java:1474)
at com.shizhefei.view.indicator.ScrollIndicatorView.onLayout(ScrollIndicatorView.java:188)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1697)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1551)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1460)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1697)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1551)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1460)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
....
想实现底部导航中间加按钮效果;1.1.4版本没有setCenterView(View centerView, ViewGroup.LayoutParams layoutParams)方法?
// 设置page是否可滑动切换
indicatorViewPager.setPageCanScroll(false);
这个方法时取消了吗?
GetViewForTab必须返回一个TextView,又没人办法在xml里加,不知道从哪里入手了?
代码如下:
int selectColorId = R.color.color_1eb7d2;
int unSelectColorId = R.color.color_434343;
int colorIndicat = Color.parseColor("#1eb7d2");
indicator.setScrollBar(new ColorBar(context, colorIndicat, 10));
indicator.setOnTransitionListener(new OnTransitionTextListener().setColorId(context, selectColorId, unSelectColorId));
indicator.setOnItemSelectListener(new Indicator.OnItemSelectedListener() {
@Override
public void onItemSelected(View view, int i, int i1) {
//这里无反应?
}
});
我想要实现中间那个按钮突出显示(超出窗口边界),设置了FixedIndicatorView的clipChildren=false,并且将centerView的 android:layout_gravity="bottom",还是不行
ViewPagerIndicator里面的viewpager好像不能很好的回收,有没有让viewpager回收呢,现在我用你的库(没有修改过源码,直接导入工程)来做成类似懂球帝这样的应用,然后内存一直飙升不能回收,我估计是fragment里面的viewpager不能回收view,麻烦帮解答一下或者有什么好的建议提一下好吧?谢谢了!坐等博主的佳音
用你的libiary报了这个错,就是说没有找到MainActivity这个class,推测是因为Android-support-v4.jar版本引入不一致问题,但是我引入了没有修改的androi-support-v4.jar,程序可以跑起来,只是说没有iscanscroll这个函数,但是引入了你修改的support-v4,就报了上面这个错,libiary也是引入的这个文件,希望尽快解决, 谢谢
每次切换viewpager都会打印log,类似pppp: 1: mPosition:0 offsetX:103.0,要怎么关掉这些log
setOnIndicatorItemClickListener onItemClick会导致ScrollIndicatorView的dispatchDraw死循环执行
可滑动tab界面里,选择12个,进去后点击最后一个tab,这组tab不会动,下面的指示器会移动过来。再点击第一个tab,这组tab会先跳动一下,然后指示器才会移动过来。也就是说点击tab的时候,这组tab有时会跳动,有时不会跳动。
在 FragmentTabhost 内的一个Fragment 使用的控件 切换Tab后会有问题,Fragment无法正常显示,有没有累死FragmentStatePagerAdapter 的适配器解决这个问题
apk文件失效了,安装之后提示不能正常运行。
indicatorViewPager = new IndicatorViewPager(indicator, viewPager);
indicatorViewPager.setAdapter(new MyAdapter(getSupportFragmentManager(), listTab, listData));
viewPager.setCanScroll(true);
viewPager.setOffscreenPageLimit(2);
在MyAdapter中的自定义变量listTab,listData进行动态增加,界面没有变化。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.