Androidによるマルチキャスト効果(3)底部の円点状態の変化
2870 ワード
自動ローテーションと手動ローテーションの後、円点の切り替えを実現する必要があります
点の状態を変更するリスナーのカスタマイズ
新しいインタフェースpublic interface DotChangeListenerを作成し、メソッドvoid dotChangeListener(int index)を追加します.そしてImageBannerFramLayoutでインタフェースを変更し、方法の具体的な実現を実現する.
ImageBannerViewGroupを変更します.JAvaでのonTouchEventメソッドは、MotionEvent.ACTION_MOVEイベントでカスタムの円点状態を変更するリスナーを呼び出す
点の状態を変更するリスナーのカスタマイズ
新しいインタフェース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 。
}