1

ImageView上でドラッグされている指を検出したいと思います。ImageView を取得し、GestureDetector と View.OnTouchListener のインスタンスを作成してから、View.OnTouchListener を ImageView に設定します。

OnTouchListener はすべてのタッチ (「タッチが発生しました」) を検出し、それらを GestureDetector に渡しますが、onScroll または onFling のメソッドを呼び出すことはありません。私が間違っていることは何ですか?関連するソースを以下に示します。

    myImageView = (ImageView) findViewById(R.id.imageView1);

    myGestureDetector = new GestureDetector(this,
            new GestureDetector.OnGestureListener() {

                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    // TODO Auto-generated method stub
                    return false;
                }

                @Override
                public void onShowPress(MotionEvent e) {
                    // TODO Auto-generated method stub

                }

                @Override
                public boolean onScroll(MotionEvent e1, MotionEvent e2,
                        float distanceX, float distanceY) {
                    // TODO Auto-generated method stub
                    Log.d("gestures", "scroll");
                    return true;
                }

                @Override
                public void onLongPress(MotionEvent e) {
                    // TODO Auto-generated method stub

                }

                @Override
                public boolean onFling(MotionEvent e1, MotionEvent e2,
                        float velocityX, float velocityY) {
                    // TODO Auto-generated method stub
                    Log.d("gestures", "fling");
                    return true;
                }

                @Override
                public boolean onDown(MotionEvent e) {
                    // TODO Auto-generated method stub
                    return false;
                }

            });



    gestureListener = new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            if (myGestureDetector.onTouchEvent(event)) {
                Log.d("gestures", "here");
                return true;
            }

            Log.d("gestures", "touch occured");
            return false;
        }
    };

    myImageView.setOnTouchListener(gestureListener);
4

4 に答える 4

2

OnGestureListenerの onDown メソッドは常にtrueを返す必要があります。そうしないと、onScroll が呼び出されないため、検出器は次のイベントに反応しません。

于 2011-06-27T14:36:15.637 に答える
1

onTouchEvent メソッドもオーバーライドする必要があると思います。このようなイメージビューで onFling() ジェスチャを検出しました。

   @Override
    public boolean onTouchEvent(MotionEvent event){
                return myGestureDetector.onTouchEvent(event);
    }

私の最後で動作しているコードは次のとおりです。

 public class AddNewTask extends Activity implements OnClickListener,OnTouchListener ,GestureDetector.OnGestureListener
    {
  private GestureDetector gestures;
    private ImageView imgViewPreview;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.addtask);

     gestures = new GestureDetector(AddNewTask.this,
                         this);
    imgViewPreview.setOnTouchListener(this);

    }

    public boolean onTouch(View v, MotionEvent event)
     {
        if(v==imgViewPreview)
          if(gestures.onTouchEvent(event))
             return true;


        return false;
    }

    @Override
     public boolean onTouchEvent(MotionEvent event) 
    {
       return gestures.onTouchEvent(event);      

     }

}
于 2011-06-27T13:10:47.420 に答える
0

SimpleOnGestureListenerを拡張して、カスタマイズされたジェスチャ リスナー クラスを使用してみてください。また、そうすることで、上記のすべてのメソッドをオーバーライドすることもできます。

于 2011-06-27T12:48:22.560 に答える
0

@Override を使用したときに直面しているエラーを最初に解決します。

これは主に Java コンパイラの構成 [アプリケーション プロパティ -> Java コンパイラ -> コンパイラ準拠レベル] が 1.6 であることを確認してください。

これが解決されたら、@Override 表記で再試行してください。

于 2011-06-28T13:22:52.570 に答える