Android最便捷banner轮播图实现原理及代码
来源:互联网 发布:微信呼死你软件免费版 编辑:程序博客网 时间:2024/06/04 22:35
原理图:
代码实现
public class CyclerViewPager extends ViewPager { public CyclerViewPager(Context context) { super(context); } public CyclerViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void addOnPageChangeListener(OnPageChangeListener listener) { MyPageChangeListener myPageChangeListener = new MyPageChangeListener(listener); super.addOnPageChangeListener(myPageChangeListener); } @Override public void setAdapter(PagerAdapter adapter) { // 修正 adapter 中position MyAdapter myAdapter = new MyAdapter(adapter); addOnPageChangeListener(null); //手动增加一个监听 super.setAdapter(myAdapter); setCurrentItem(1); //开启自动轮播 startScroll();//自动轮播 } @Override public boolean onTouchEvent(MotionEvent ev) { //手指触摸 按下 停止轮播 抬起继续轮播 switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: stopScroll(); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_CANCEL://取消事件 case MotionEvent.ACTION_UP: startScroll(); break; } return super.onTouchEvent(ev); } Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int currentItem = getCurrentItem(); currentItem ++; setCurrentItem(currentItem); handler.sendEmptyMessageDelayed(1, 4000);//4s发送消息 } }; public void startScroll() { //开启轮播 handler.sendEmptyMessageDelayed(1, 4000);//4s发送消息 } public void stopScroll(){ handler.removeMessages(1); } public class MyPageChangeListener implements OnPageChangeListener { private OnPageChangeListener listener; private int position; public MyPageChangeListener(OnPageChangeListener listener) { this.listener = listener; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (listener != null) listener.onPageScrolled(position, positionOffset, positionOffsetPixels); } @Override public void onPageSelected(int position) { this.position = position; if (listener != null) listener.onPageSelected(position); } @Override public void onPageScrollStateChanged(int state) { //状态改变的时候 调用 手指抬起的时候切换 if (state == ViewPager.SCROLL_STATE_IDLE) { //空闲切换 // 页面切换 自动的切换到对应的界面 最后一个A----->第一个A if (position == getAdapter().getCount() - 1) { //最后一个元素 是否平滑切换 setCurrentItem(1, false); } else if (position == 0) { //是第一个元素{D] ----> 倒数第二个元素[D] setCurrentItem(getAdapter().getCount() - 2, false); } } if (listener != null) listener.onPageScrollStateChanged(state); } } public class MyAdapter extends PagerAdapter { private PagerAdapter adapter; public MyAdapter(PagerAdapter adapter) { this.adapter = adapter; //[ABCD] } @Override public Object instantiateItem(ViewGroup container, int position) { // position 已经是 [DABCDA] 的索引了 // 修正后的索引 应该是 [ABCD]的索引 //修正position if (position == 0) { //新增的D position = adapter.getCount() - 1;// 最后一个元素 } else if (position == getCount() - 1) { //最后一个元素 A position = 0; } else { position -= 1; //计算新的索引 } return adapter.instantiateItem(container, position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { adapter.destroyItem(container, position, object); } @Override public int getCount() { return adapter.getCount() + 2; } @Override public boolean isViewFromObject(View view, Object object) { return adapter.isViewFromObject(view, object); } }}
2 0
- Android最便捷banner轮播图实现原理及代码
- [Android]使用HorizontalScrollView实现广告栏Banner及相关原理分析
- android banner 实现轮播图
- Android之最简单的Banner实现
- android轮播图Banner的使用及详解
- 利用Android属性动画实现Banner的原理与实践
- Android的banner(轮播图)的实现
- Android 轮播图Banner的简单实现
- Android广告Banner实现
- Android Banner 简单实现
- yii框架登录最简单便捷代码
- Android 热更新实现原理及代码分析
- Android 热更新实现原理及代码分析
- android热更新实现原理及代码分析
- banner轮播图的实现
- appframework实现Banner轮播图
- Banner 简单实现轮播图
- Banner实现无限轮播图
- 第四周项目三 单链表应用-连接
- Unity 去边框 并实现拖拽窗口
- 第四周-项目五-多项式求和
- 辨异 —— 算法
- Limbo模拟器的三两事
- Android最便捷banner轮播图实现原理及代码
- C#修改WebBrowser内核版本
- powerdesigner15 生成sql 表名带引号的解决办法
- Android 屏幕适配
- 第四周项目3——单链表应用(3)
- 第四周 项目六—— 循环双链表(1)
- 第四周 项目四【单链表算法库】
- TCP/IP四层模型和OSI七层模型
- android 目录结构,adb环境变量配置