Androidによるマルチキャスト効果(3)底部の円点状態の変化

2870 ワード

自動ローテーションと手動ローテーションの後、円点の切り替えを実現する必要があります
点の状態を変更するリスナーのカスタマイズ
新しいインタフェース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            。
    }