ViewPager+标签页的显示效果做的很多,很常见。这里做的是,滑动ViewPager的时候,有一条滑动条显示,一定时间后,自动隐藏。
先在xml文件中,写一个textview,用于显示滑动条,背景就是滑动条显示的UI切图。
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="150dp"
>
</android.support.v4.view.ViewPager>
<TextView
android:id="@+id/tvLine"
android:layout_width="100dp"
android:layout_height="10dp"
android:layout_marginTop="40px"
android:background="@drawable/e"
/>复制代码
代码中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;
@Override
public 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);
}
}复制代码