viewpager和fragment的综合使用能够实现一个很好的滑动效果,然后在添加类似的tab标签,这样就能标识所处的页面。(因职业操守,不能上传图片,请见谅)
但问题来了,tab的点击事件可以放到viewpager的onPageSelected中实现,但是在滑动的过程中,上面的小图标跟着一起滑动,就必须要放到onPageScrolled这个函数中了。
viewpaper函数意义请查看:http://blog.csdn.net/error/404.html?from=http%3a%2f%2fblog.csdn.net%2fchanglei_shennan%2farticle%2fdetails%2f45476617
首先先看下这个函数的参数意义:
onPageScrolled(int arg0,float arg1,int arg2) ,当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到
调用。其中三个参数的含义分别为:
arg0 :当前页面,及你点击滑动的页面
arg1:当前页面偏移的百分比
arg2:当前页面偏移的像素位置
(参见官网:http://docs.eoeandroid.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html#onPageScrolled(int, float, int))
明白这些参数,实现起来就很简单了。首先大体思路讲解:
1. 初始化界面的时候,默认该图标显示在第一个tab处。
image = (ImageView) findViewById(R.id.cursor); //image标志那个滑动的小图标
Bitmap btm = BitmapFactory.decodeResource(getResources(),
R.drawable.redline);
bmpW = btm.getWidth();
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenW = dm.widthPixels;
distanceTab = screenW / 3;
offset0 = (screenW / 3 - bmpW) / 2; //滑动偏移量
matrix = new Matrix();
matrix.postTranslate(offset0, 0);
image.setImageMatrix(matrix);
2. 然后在根据viewpager的onPageScrolled偏移量,及当前界面,在计算滑动偏移量,最后实现活动。因这个函数是根据滑动效果,实时调用的,这样就能实现,小图标跟随viewpaper的滑动效果。
if (arg0 == 0) {
offset0 = (screenW / 3 - bmpW) / 2;
}
if (arg0 == 1) {
offset0 = screenW / 2 - bmpW / 2;
}
if (arg0 == 2) {
offset0 = screenW * 2 / 3 + bmpW - 25 ;
}
offset = offset0 + arg1 * (screenW / 3); //计算在每个页面的偏移量
//实现偏移动画
Matrix matrix1 = new Matrix();
matrix1.postTranslate(offset, 0);
image.setImageMatrix(matrix1);