5

私はオンラインで多くの例を見てきましたが、それらはすべてこの方法でジェスチャーリスナーを実装しています。androidにジェスチャーイベントを取得させることができません。myTextの値は変更されず、logcatに出力がありません。私は何が間違っているのですか?

public class MainActivity extends Activity {
private GestureDetector gDetector;
private TextView myText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    gDetector = new GestureDetector(this, new MyOnGestureListener());
    myText = (TextView) findViewById(R.id.mytext);
    myText.setText("Test");

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);

    return true;
}

class MyOnGestureListener extends SimpleOnGestureListener implements
        OnGestureListener {
    @Override
    public boolean onDown(MotionEvent e) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub
        return true;
    }

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

    @Override
    public void onLongPress(MotionEvent e) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub

    }

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

    @Override
    public void onShowPress(MotionEvent e) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        Log.d("Main", "did");
        myText.setText("hi");
        // TODO Auto-generated method stub
        return true;
    }
}

}

4

3 に答える 3

7

欠けている部分は、GestureListenerをタッチイベントにリンクしていないことです。

したがって、次のようにOnTouchListenerをオーバーライドできます。

@Override
public boolean onTouchEvent(MotionEvent me) {
    return gDetector.onTouchEvent(me);
}

または、特定のビューでGestureDetectorを有効にする場合:

view.setOnTouchListener(new OnTouchListener{
    @Override
    public boolean onTouchEvent(MotionEvent me) {
       return gDetector.onTouchEvent(me);
    }
})
于 2012-11-29T20:09:25.560 に答える
4

フィールドgDetectorを使用する必要があります。これまでのところ、インスタンスを作成しただけですが、今度はそれを使用して、その実を引き出す必要があります。

たとえば、次のようになります。

 this.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(final View view, final MotionEvent event) {
       return gDetector.onTouchEvent(event);
    }
 });
于 2012-11-29T20:10:14.437 に答える
0

ここでこのコードを試してください

これは機能するはずです。

行も変更します

  gestureScanner = new GestureDetector(this);

  gestureScanner = new GestureDetector(ScrollTest.this, this);
于 2012-11-29T20:03:04.160 に答える