2013-10-24 3 views
10

グリッドが66ビューあり、ビューをタッチしたりドラッグしたり移動したりすると背景色が変わります。ユーザーが指を動かしているときに現在タッチされているビューを確認する

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

+0

をあなたはこの問題に対する解決策を共有してくださいすることができます。私は同様のタイプの仕事をしたいと思っていました。 – Anmol

+0

@Anmol下記の回答をご覧ください。 – bgolson

答えて

11

は、ここに私の答えが見つかりました:あなたは子ビューをループしており、タッチが現在オーバーで表示され見つけるために手動検出をヒットしないように

Android : Get view only on which touch was released

が見えます。

は、親の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; 
    } 
} 
1

テストしたが、私はあなたが何かに似て行うことができると思いますない:OnTouchListenerを設定し、単純にすべてのあなたのchildViewsをループすることにより、おそらくScrollView Inside ScrollView

parentView.setOnTouchListener(new View.OnTouchListener() { 

       public boolean onTouch(View v, MotionEvent event) { 
        Log.v(TAG,"PARENT TOUCH"); 
        findViewById(R.id.child).getParent().requestDisallowInterceptTouchEvent(false); 
        return false; 
       } 
      }); 
      childView.setOnTouchListener(new View.OnTouchListener() { 

       public boolean onTouch(View v, MotionEvent event) 
       { 
        Log.v(TAG,"CHILD TOUCH"); 
        // Disallow the touch request for parent on touch of child view 
        v.getParent().requestDisallowInterceptTouchEvent(true); 
        return false; 
       } 
      }); 

を。

+0

お返事ありがとうございます。問題は、ビュー内でタッチが開始された場合にのみ、子供のonTouchは起動します。ドラッグに反応しません。私は解決策を見つけ出し、上記に投稿しました。再度、感謝します! – bgolson

関連する問題