15

プレイヤーが画面に触れたときと触れなかったときを読みたいです。

    @Override
public boolean onTouchEvent(MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_UP){  //ACTION UP
        actionOnUP = true;
        Log.v("MC", "Up");
    }
    if(event.getAction() == 0){ //ACTION DOWN
        actionOnUP = false;
        Log.v("MC", "Down");
    }
    Log.v("MC", event.getAction() + " ");
    return super.onTouchEvent(event);
}

このコードは、はい、機能しますが、プレーヤーが画面に触れた場合(ACTION_DOWN)のみですが、画面に触れていない場合(ACTION_UP)は何も起こりません:/ LogCat

^これはLogCatの画面です。ご覧のとおり、これはACTION_DOWNのみですが、ACTION_UPについては何もありません。クラスはビューを拡張しています:

public class MainClass extends SurfaceView implements SurfaceHolder.Callback {

手伝って頂けますか?

編集:私のゲームはこのチュートリアルに基づいています:http ://www.droidnova.com/2d-tutorial-series-part-v,848.html

4

3 に答える 3

50

私の推測では、super.onTouchEvent は を返しているとfalse思います。呼び出しているスーパークラスは、タッチ イベントを気にしないからです。

onTouchEvent に戻るfalseと、Android OS はそのジェスチャでの以降のイベントを通知しなくなります。ACTION_UP引き続きタッチ イベント情報 (たとえば) を受け取りたい場合はtrue、最初のACTION_DOWNイベントに戻る必要があります。

于 2012-09-25T17:56:15.797 に答える
2

try :

int action = event.getAction();
int code = action & MotionEvent.ACTION_MASK;
if (code == MotionEvent.ACTION_POINTER_UP || code == MotionEvent.ACTION_UP || MotionEvent.ACTION_CANCEL) {
于 2012-09-25T17:42:20.487 に答える
2

「petey」の解決策がうまくいきました!一部の構文エラーを除き、ここで修正:

int code = event.getAction() & MotionEvent.ACTION_MASK;
if ((code == MotionEvent.ACTION_POINTER_UP) || (code == MotionEvent.ACTION_UP) || (code == MotionEvent.ACTION_CANCEL)) {

どうもありがとう。

于 2014-12-19T21:47:12.180 に答える