21

66 個のビューのグリッドがあり、ビューがタッチまたはドラッグ/移動された場合、背景色を変更したいと思います。

親ViewGroupにタッチリスナーを配置する必要があると思いますが、どの子ビューがドラッグ/移動されているかを判断するにはどうすればよいですか?

4

2 に答える 2

21

ここで私の答えを見つけました:

Android : タッチがリリースされたビューのみを取得

子ビューをループし、ヒット検出を手動で行って、タッチが現在終了しているビューを見つける必要があるようです。

これは、親 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;
    }
}
于 2013-10-24T17:17:46.287 に答える