140_自定义ViewPager
来源:互联网 发布:朝鲜奢侈生活知乎 编辑:程序博客网 时间:2024/06/06 15:02
自定义ViewPager
官方给的东西当然还不够
我们自己来搞个自定义ViewPager
public class CustomViewPager extends ViewPager{
//构造函数
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
我们来个两个成员变量
表示第一个页面和第二个页面
private View left;
private View right;
再来个HashMap存放ViewPager的页面
Map<Integer, ImageView> images = new HashMap<>();
来写两个方法控制页面增删
public void addChildView(ImageView iv, int position) {
images.put(position, iv);
}
public void removeChildView(int position) {
images.remove(position);
}
我们要在adapter中添加这两个方法
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(container.getContext());
imageView.setBackgroundResource(pages[position]);
container.addView(imageView);
mVp.addChildView(imageView,position);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
mVp.removeChildView(position);
}
现在我们要监听页面的动态
那么就要给mVp设置listener
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
我们在CustomViewPager中重写一下方法
@Override
protected void onPageScrolled(int position, float offset, int offsetPixels) {
super.onPageScrolled(position, offset, offsetPixels);
}
这里解释一下3个参数
1.position 当前页面的索引值
2.offset 手指划过去的比例值,占屏幕的宽
3.offsetPixels 手指滑动的像素值
给页面设置动画
@Override
protected void onPageScrolled(int position, float offset, int offsetPixels) {
super.onPageScrolled(position, offset, offsetPixels);
left = images.get(position);
right = images.get(position + 1);
startAnimation(left, right, position, offset, offsetPixels);
}
写一个startAnimation方法
private void startAnimation(View left, View right, int position, float offset, int offsetPixels) {
if (right != null) {
float translationX = -(getWidth() - offsetPixels);
right.setTranslationX(translationX);
float min_scale = 0.75f;
float scaleFactor = min_scale + (1 - min_scale) * Math.abs(offset);
right.setScaleX(scaleFactor);
right.setScaleY(scaleFactor);
}
}
然后我们要让A页面在B页面上面,还是在方法内
if (left != null) {
left.bringToFront();
}
好了搞定
- 140_自定义ViewPager
- viewpager自定义
- 自定义Viewpager
- 自定义ViewPager
- 自定义viewpager
- 自定义ViewPager
- 自定义viewpager
- 自定义ViewPager
- 使用ViewPager.PageTransformer自定义ViewPager
- viewpager轮播图--狸菇凉_
- ViewPager自定义切换动画
- 自定义ViewPager切换动画
- 自定义ViewPager指示器
- 自定义viewpager切换动画
- ViewPager自定义指示条
- 自定义控件-ViewPager篇
- 自定义ViewPager的高度
- Android--自定义tab+viewPager
- DirectFB的架构介绍
- win7常用cmd命令
- 345. Reverse Vowels of a String
- SQL Server 2008安装报错:The specified credentials for the sql server service are not valid
- leetcode-8
- 140_自定义ViewPager
- jdbc,if(res.next)判断结果失败
- NOJ——1508火烧赤壁2(并查集+启发式合并+逆序加边)
- 141_自定义Transformer
- Java操作Excel文件以及将xls/xlsx转为csv文件
- Spark Streaming源码解读之Job动态生成和深度思考
- 最新android APP框架介绍
- Octave 线性代数 行列式 2
- 04.手把手教你 .Net EasyUI DataGrid(弹框式添加数据)