自动轮播和手动轮播之后应该实现圆点的切换

自定义改变圆点状态的监听器

新建接口public interface DotChangeListener,添加方法void dotChangeListener(int index);并在ImageBannerFramLayout实现改接口,方法的具体实现:

    /**     * 改变圆点状态方法的实现     * @param index     */    @Override    public void dotChangeListener(int index) {        //传入的index为当前轮播图片的索引        //获得圆点个数        int count = linearLayout.getChildCount();        for (int i = 0; i < count; i++) {            ImageView imageView = (ImageView) linearLayout.getChildAt(i);            //设置圆点的选中状态            if (i == index) {                imageView.setImageResource(R.drawable.dot_select);            } else {                imageView.setImageResource(R.drawable.dot_normal);            }        }    }

修改ImageBannerViewGroup.java中的onTouchEvent方法,在MotionEvent.ACTION_MOVE事件中调用自定义的改变圆点状态的监听器

    @Override    public boolean onTouchEvent(MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN: {//表示的是用户按下的一瞬间                isClick = true;                stopAuto();//用户按下禁止自动轮播                //第二种方法优化:                if (!scroller.isFinished()) {                    scroller.abortAnimation();                }                startX = (int) event.getX();                break;            }            case MotionEvent.ACTION_MOVE: {//表示的是用户按下之后在屏幕上移动的过程                int moveX = (int) event.getX();                int distance = moveX - startX;//移动的距离                scrollBy(-distance, 0);                startX = moveX;                isClick = false;                break;            }            case MotionEvent.ACTION_UP: {//表示的是用户抬起的一瞬间                int scrollX = getScrollX();//当前位置                index = (scrollX + childWidth / 2) / childWidth;                if (index < 0) {//说明此时已经滑动到左边第一张图片                    index = 0;                } else if (index > childCount - 1) {//说明此时已经滑动到最右边最后第一张图片                    index = childCount - 1;                }                if (isClick) {//代表是点击事件                    imageBannerLister.clickImageLister(index);                } else {                    //第二种方法第三步:                    int dx = index * childWidth - scrollX;                    scroller.startScroll(scrollX, 0, dx, 0);                    postInvalidate();                    dotChangeListener.dotChangeListener(index);                    //第一种方法//                scrollTo(index * childWidth, 0);//滑动设置                }                startAuto();//用户离开屏幕开启自动轮播                break;            }            default: {                break;            }        }//        return super.onTouchEvent(event);        return true;//返回true的目的是告诉 我们该Viewgroup容器的父View 我们已经处理好了该事件。    }

 

更多相关文章

  1. Android顶部弹出提示语的三种实现方式:WindowManager、PopupWindo
  2. 高仿网易4.0新UI框架
  3. Android(安卓)5.0 CTS测试 ManagedProfileTest测试总结
  4. 【Android(安卓)UI】具有弹性的ListView
  5. android view滑动的几种方法
  6. Android(安卓)listview指定垂直滑动距离
  7. Android用户界面 UI组件--TextView及其子类(三) EditView以及各
  8. android 弹性ScrollView(已优化)
  9. Android中使用GridView分页显示系统所安装的应用,支持拖动与手势

随机推荐

  1. 基于Cocos SDKHub接入华为HMS Game服务—
  2. 前端JavaScript开发中需要注意的代码问题
  3. 基于SSH框架的人力资源管理系统设计与实
  4. CCNP(ISCW)实验:配置Cisco支持AAA计费
  5. 2021年最新UI/UE设计学习线路
  6. shell脚本中数组常用操作
  7. idea激活码_idea激活码2021_idea激活码20
  8. kubernetes概述-介绍、组件、架构
  9. vmware 虚拟机中Ubuntu 20.04系统大小写
  10. ThingJS:数字孪生城市的最小单元如何“智