簡體   English   中英

無法使OnTouchListner正常工作

[英]Can't get OnTouchListner to work

我正在嘗試創建我的第一個android游戲(在eclipse中),但似乎無法使OnTouchListner正常工作,主要是因為我不知道如何或在哪里創建它。 我試圖弄清楚有人在哪里點擊屏幕。 有人可以告訴我如何以及在何處創建OnTouchListner!

活動課:

package com.gregsapps.fallingbird;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class Game extends Activity implements OnTouchListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new GameView(this));
    }
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        if(event.getAction() == MotionEvent.){
            System.out.println("TOUCH");
        }
        return false;
    }

}

查看課程:

package com.gregsapps.fallingbird;

import android.R;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.View;

public class GameView extends View{

    private Bird bird;
    private boolean runOnce = false;
    private Context context;

    public GameView(Context context) {
        super(context);
        this.context = context;
        this.setDrawingCacheEnabled(true);
        // TODO add setup code
    }

    protected void onDraw(Canvas canvas){
        update(canvas);
        //TODO add drawing code
        this.buildDrawingCache();
        //bird.canvasImage = this.getDrawingCache(true);
        canvas.drawBitmap(bird.image, bird.x, bird.y, null);
        System.out.println("drawing");
        invalidate();
    }

    private void update(Canvas canvas){
        //TODO add code to update stuff
        if(runOnce == false){
            bird = new Bird(canvas, com.gregsapps.fallingbird.R.drawable.bird, context);
            runOnce = true;
        }
        bird.move();
    }



}

您應該只能在創建的視圖上進行設置:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GameView gv = new GameView(this);
    setContentView(gv);

    // set the touch listener for the view
    gv.setOnTouchListener(this);
}

像這樣實現它:

public class Game extends Activity implements OnTouchListener{
    GameView gv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        gv = new GameView(this);
        setContentView(gv);

        gv.setOnTouchListener(this);
    }
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            int x = event.getX();
            int y = event.getY();
            System.out.println("Touched view at X: " + X + " Y: " + Y );
        }
        return false;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM