Android 自定义可自动扩大缩小的ViewPager
来源:互联网 发布:网吧软件管理 编辑:程序博客网 时间:2024/05/20 15:58
前些天看到蘑菇街的主页上有一个效果 左右滑动照片,控件可以随着照片的大小放大缩小 于是就自己试着实现了以下
我是使用ViewPager实现的 在其基础上进行了简单的改造。
代码如下:
public class ScaleViewPager extends ViewPager { interface ScalePagerChangedListener { public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels); public void onPageSelected(int position); public void onPageScrollStateChanged(int state); } public static class ItemSize { int width; int height; public ItemSize(int width, int height) { this.height = height; this.width = width; } } private int itemCount; private OnPageChangeListener mListener; private ScalePagerChangedListener mNewListener; private List<ItemSize> itemSizes; private Context ctx; public List<ItemSize> getItemSizes() { return itemSizes; } public void setItemSizes(List<ItemSize> itemSizes) { this.itemSizes = itemSizes; initView(getContext()); } public ScaleViewPager(Context context) { super(context); } public ScaleViewPager(Context context, AttributeSet attrs) { super(context, attrs); } private void initView(Context context) { final ViewWrapper viewWrapper = new ViewWrapper(this); mListener = new OnPageChangeListener() { int curPos = -1; int ppp = 0; int leftPos, rightPos; @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (itemSizes != null) { itemCount = itemSizes.size(); } /* 需要获取 当前的 大小 和 下一个要滑动到的大小 */ if (curPos == -1) { curPos = position; //当前的位置 } leftPos = position; rightPos = position + 1; if (rightPos > itemCount - 1) { rightPos = position; } // 也就是说 是从 left 到 right这两个布局的变化 if (curPos == leftPos) { //表示手指向左滑 int leftH = itemSizes.get(leftPos).height, rightH = itemSizes.get(rightPos).height; int des = rightH - leftH; viewWrapper.setHeight((int) (leftH + positionOffset * des)); } else if (curPos == rightPos) { //表示手指向右滑 int leftH = itemSizes.get(leftPos).height, rightH = itemSizes.get(rightPos).height; int des = leftH - rightH; viewWrapper.setHeight((int) (rightH + (1 - positionOffset) * des)); }else{ } if (mNewListener != null) { mNewListener.onPageScrolled(position, positionOffset, positionOffsetPixels); } } @Override public void onPageSelected(int position) { ppp = position; if (mNewListener != null) { mNewListener.onPageSelected(position); } } @Override public void onPageScrollStateChanged(int state) { if (state == 0||state==2) { curPos = ppp; } if (mNewListener != null) { mNewListener.onPageScrollStateChanged(state); } } }; addOnPageChangeListener(mListener); } public void addScalePagerChangedListener(ScalePagerChangedListener listener) { this.mNewListener = listener; } @Override public void addOnPageChangeListener(OnPageChangeListener listener) { super.addOnPageChangeListener(listener); } public static class ViewWrapper { private View mTarget; public ViewWrapper(View mTarget) { this.mTarget = mTarget; } public int getHeight() { return mTarget.getLayoutParams().height; } public void setHeight(int height) { mTarget.getLayoutParams().height = height; mTarget.requestLayout(); } }}
使用的方法 很简单 ,可按照正常的ViewPager一样使用 ,如果想要开启可伸缩的功能,需要做的仅仅是setItemSizes(),如果想监听滑动改变事件,请使用 addScalePageChangedListener 这样 就可以实现了
实现的原理:
原理非常简单 仅仅是给原本的ViewPager添加 一个 PageChangedListener 然后根据其滑动的规律判断出当前要过渡的page是哪个,然后根据传入的ItemSize 和 滑动的比例 改变ViewPager的大小即可
0 0
- Android 自定义可自动扩大缩小的ViewPager
- Android 用ViewPager实现可自动循环的Banner图
- Android自定义ViewPager可控制是否滑动
- android自定义view实现可自由放大缩小和移动的imageView
- LVM的扩大与缩小 (转)
- android 中如何扩大按钮的可点击范围
- 自定义viewpager,实现图片多指触控,双击,放大或缩小,和viewpager的冲突
- Android ViewPager 无限循环左右滑动(可自动) 实现
- Android 实现可循环,可轮播的viewpager
- Android viewpager + 可缩放的imageview
- StretchBlt缩小扩大失真
- titlewindow扩大,缩小
- treeview字体扩大缩小
- 缩小客户区(扩大非客户区)的方法
- 将内存扩大缩小的函数 realloc(){}
- 扩大矩形函数和缩小矩形函数的用法
- Viewpager中嵌入自定义可缩放view遇到的问题
- Viewpager中嵌入自定义可缩放view遇到的问题
- 详解Spring MVC 4常用的那些注解
- Linux CentOS 7 安装confluence 5.8.10
- 图片服务器的意义
- coffee-script运行环境
- DOM 节点查询
- Android 自定义可自动扩大缩小的ViewPager
- 【UI模块】Fragment之一(创建和调用)
- Tomcat服务器下部署项目几种方式
- linux kill %1 是什么意思
- spring注解配置原理浅析
- [我在学Android]认清Android框架 MVC,MVP和MVVM
- Apache虚拟主机的配置
- linux下运行jar
- 【对比】市场上自助建站系统哪个好?