Android 實現輪播圖效果(三) 底部圓點狀態改變
阿新 • • 發佈:2018-12-13
自動輪播和手動輪播之後應該實現圓點的切換
自定義改變圓點狀態的監聽器
新建介面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 我們已經處理好了該事件。 }