2011-03-07 30 views
1

私は複数のImageViewを持っており、複数の画像に指をドラッグすると、それぞれのonTouchイベントが発生します。現時点では、onTouchイベントは最初のImageView(または実際には複数のImageView上で起動しますが、画面をマルチタッチする場合にのみ発生します)。擬似コード:複数のImageViewのAndroid onTouchイベント

  for(int i=0;i<5;i++){ 
       ImageView img=new ImageView(this); 
       LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(width,height); 
       img.setImageResource(R.drawable.cell); 
       img.setOnTouchListener(this); 
       mainLayout.addView(img,layoutParams); 
      } 
      ... 

      public boolean onTouch (View v, MotionEvent event){ 
       Log.d("MY_APP","View: " + v.getId()); 
       return false; 
      } 

私は完全に間違ったツリーを吠えていますか?

ありがとうございました。

答えて

1

私は、イベントをタッチしてgetXとgetYをビューの場所と比較するのではなく、moveイベントを使用する必要があると思います。

 @Override 
    public boolean onTouchEvent(MotionEvent ev) { 

     final int action = ev.getAction(); 

     switch (action) { 

      // MotionEvent class constant signifying a finger-down event 

      case MotionEvent.ACTION_DOWN: { 
       break; 
      } 

      // MotionEvent class constant signifying a finger-drag event 

      case MotionEvent.ACTION_MOVE: { 

        X = ev.getX(); 
        Y = ev.getY(); 
        //compare here using a loop of your views 
        break; 

      } 

      // MotionEvent class constant signifying a finger-up event 

      case MotionEvent.ACTION_UP: 

       break; 

     } 
     return true; 
    } 
0

はい、私は同じ問題がありました。答えはImageViewsを埋め込んだレイアウト用のタッチリスナーを作成し、そのビューの上にあるX、Y位置を計算することです。 OnTouchListenerは、それが接続されているビューに対してのみ呼び出されます。私はそれがImageViewのために呼び出された場合、私が知る限り、そのImageViewにあなたの動きを開始するまでは起動しません。