1

このコードにトーストが表示されない理由がわかりません。OnGestureListener インターフェイスを実装し、ユーザーがアクティビティをスワイプしたときにトーストを表示しようとしました。これは、onFling メソッドを呼び出す必要があることを意味しますが、トーストを受信して​​いません。問題を理解するのを手伝ってください。

import android.os.Bundle;
import android.app.Activity;
import android.view.GestureDetector.OnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.widget.Toast;

public class MainActivity extends Activity implements OnGestureListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onDown(MotionEvent e) {
    // TODO Auto-generated method stub
    Toast.makeText(this,"onDown",Toast.LENGTH_LONG).show();
    return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    // TODO Auto-generated method stub
    Toast.makeText(this,"Swipe to Explore the Happiness Path",Toast.LENGTH_LONG).show();
    return false;
}

@Override
public void onLongPress(MotionEvent e) {
    // TODO Auto-generated method stub
    Toast.makeText(this,"onLongPress",Toast.LENGTH_LONG).show();

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
        float distanceY) {
    // TODO Auto-generated method stub
    return false;
}

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

}

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

}

4

1 に答える 1

2

GestureDetector は、モーション イベントを受け取り、それらが何であるかを判断するためにいくつかの数学的な魔法を実行し、特定のジェスチャまたはその他のモーション コールバックとして GestureListener オブジェクトへの呼び出しをデリゲートできる Android クラスです。実装するクラスである GestureListener オブジェクトは、GestureDetector が認識する特定のジェスチャのこれらの呼び出しを受け取り、必要に応じて反応できるようにします (この場合は、PlayAreaView 内でグラフィックを移動します)。GestureDetector は特定のモーションの検出を処理しますが、それらに固有の処理を行ったり、すべての種類のジェスチャを処理したりするわけではありません。

以下のように GestureDetector を追加し、onTouch画面のタッチを検出するイベントを実装してみてください。

public class MainActivity extends Activity implements OnGestureListener {

private GestureDetector gDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
gDetector = new GestureDetector(this);
}
 @Override
public boolean onTouchEvent(MotionEvent me) {
    return gDetector.onTouchEvent(me);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onDown(MotionEvent e) {
    // TODO Auto-generated method stub
    Toast.makeText(this,"onDown",Toast.LENGTH_LONG).show();
    return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    // TODO Auto-generated method stub
    Toast.makeText(this,"Swipe to Explore the Happiness Path",Toast.LENGTH_LONG).show();
    return false;
}

@Override
public void onLongPress(MotionEvent e) {
    // TODO Auto-generated method stub
    Toast.makeText(this,"onLongPress",Toast.LENGTH_LONG).show();

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
        float distanceY) {
    // TODO Auto-generated method stub
    return false;
}

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

}

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

GestureDetectorをもっと理解するには

于 2013-10-12T12:39:44.083 に答える