66 個のビューのグリッドがあり、ビューがタッチまたはドラッグ/移動された場合、背景色を変更したいと思います。
親ViewGroupにタッチリスナーを配置する必要があると思いますが、どの子ビューがドラッグ/移動されているかを判断するにはどうすればよいですか?
66 個のビューのグリッドがあり、ビューがタッチまたはドラッグ/移動された場合、背景色を変更したいと思います。
親ViewGroupにタッチリスナーを配置する必要があると思いますが、どの子ビューがドラッグ/移動されているかを判断するにはどうすればよいですか?
ここで私の答えを見つけました:
子ビューをループし、ヒット検出を手動で行って、タッチが現在終了しているビューを見つける必要があるようです。
これは、親 LinearLayout で dispatchTouchEvent をオーバーライドすることで行いました。
LinearLayout parent = new LinearLayout(this.getActivity()){
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
int x = Math.round(ev.getX());
int y = Math.round(ev.getY());
for (int i=0; i<getChildCount(); i++){
LinearLayout child = (LinearLayout)row.getChildAt(i);
if(x > child.getLeft() && x < child.getRight() && y > child.getTop() && y < child.getBottom()){
//touch is within this child
if(ev.getAction() == MotionEvent.ACTION_UP){
//touch has ended
}
}
}
return true;
}
}