ViewPager+标签页的显示效果做的很多,很常见。这里做的是,滑动ViewPager的时候,有一条滑动条显示,一定时间后,自动隐藏。
先在xml文件中,写一个textview,用于显示滑动条,背景就是滑动条显示的UI切图。
复制代码
代码中imageRIds.length是数据长度,根据实际获取的数据分配每一个textView实际应该显示多宽
这里转换成ViewGroup.MarginLayoutParams,是因为只有这个布局参数才能找到设置margin方法复制代码
int width = getWindowManager().getDefaultDisplay().getWidth();int lineWidth = width / imageRIds.length;layoutParams = (ViewGroup.MarginLayoutParams) tvline.getLayoutParams();layoutParams.width = lineWidth;tv_line.setLayoutParams(layoutParams);复制代码
此处有一个小细节,如果是在Activity之中,
int width = getWindowManager().getDefaultDisplay().getWidth();没有问题。
如果在Fragment中使用。换成
int width = activity.getWindowManager().getDefaultDisplay().getWidth();这里用activity是因为getActivity()可能为空。复制代码
所以在fragment中onAttach方法中,把activity赋值给成员变量。private Activity activity;@Overridepublic void onAttach(Activity activity) { this.activity = activity; super.onAttach(activity);}复制代码
在ViewPager滑动的时候,动态设置textView的margin实现跟随Viewpager滑动效果,设置滑动监听。
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { if (layoutParams != null && v != 0){ tv_line.setVisibility(View.VISIBLE); layoutParams.setMarginStart((int) ((i + v) * layoutParams.width)); tv_line.setLayoutParams(layoutParams); } } @Override public void onPageSelected(int i) { handler.postDelayed(new TVRun(),1000); } @Override public void onPageScrollStateChanged(int i) { }});复制代码
此处发了一个延时handler,是ViewPager滑动结束以后,一秒钟之后隐藏滑动条。
class TVRun implements Runnable{ @Override public void run() { tv_line.setVisibility(View.GONE); }}复制代码