android開発、タッチイベントが呼ばれない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
AliceCoder
記事: 51
登録日時: 13年前

android開発、タッチイベントが呼ばれない

#1

投稿記事 by AliceCoder » 12年前

開発環境
windows7 64bit
Eclipse
Android Developer Tools
Build: v21.1.0-569685

androidでタッチイベントを使いたいのですがタッチしても反応しません
ttp://dixq.net/Android/
↑アンロドイドの館の(s2.03、FPSを表示する) のプロジェクトをDLして使わせてもらっています。
自分でViewを継承したクラス「TouchEvent」を作ったのですが、実機で実行してタッチしても
onTouchEventが通っていないようです
アクティビィー継承したクラスとView継承したクラスだけでテストしてみたらタッチイベントが確認できたので
基本的な使い方は間違っていないと思うのですが・・・

Player.java

コード:

public class Player extends Task {
	private TouchEvent _touchEvent;
	private Bitmap _image;
	private Paint _paint = new Paint();
	private float _angle;//キャラの角度
	private float _x, _y;//キャラの座標
	private float _speed;//キャラの移動量
	private int _maxHp, _nowHp;//HP
	private int _atack;//攻撃力
	
	
	public Player(Context context){
		Resources r=context.getResources();
        _image = BitmapFactory.decodeResource(r,R.drawable.player);
        _touchEvent = new TouchEvent(context);
        statusInit();
	}
	
	@Override
	public boolean update(){
        _x = _touchEvent.getTouchX();
		_y = _touchEvent.getTouchY();
		return true;
	}
	
	@Override
	public void draw(Canvas c){
		c.drawBitmap(_image, _x, _y, _paint);
	}
	
	private void statusInit(){
		_angle = 0.0f;//キャラの角度
		_x = 0.0f;
		_y = 0.0f;//キャラの座標
		_speed = 2.0f;//キャラの移動量
		_maxHp = 100;
		_nowHp = 100;//HP
		_atack = 10;//攻撃力
	}
}
TouchEvent.java

コード:

public class TouchEvent extends View{
	private float _x=0.0f, _y=0.0f;
	
	public TouchEvent(Context context) {
		super(context);
		setFocusable(true);
		setClickable(true);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event){
		int action = event.getAction();
		switch (action&MotionEvent.ACTION_MASK) {
        	case MotionEvent.ACTION_DOWN:
        		_x = 50.0f;
        		break;
        	case MotionEvent.ACTION_POINTER_DOWN:
        		_x = 50.0f;
        		break;
        	case MotionEvent.ACTION_UP:
        		_x = 50.0f;
        		break;
        	case MotionEvent.ACTION_POINTER_UP:
        		_x = 50.0f;
        		break;
        	case MotionEvent.ACTION_MOVE:
        		_x = 50.0f;
        		break;
        }
		_x = 50.0f;
		return true;
	}
	
	public float getTouchX(){
		return _x;
	}
	
	public float getTouchY(){
		return _y;
	}
}

AliceCoder
記事: 51
登録日時: 13年前

Re: android開発、タッチイベントが呼ばれない

#2

投稿記事 by AliceCoder » 12年前

エントリのActivity継承クラスでのsetContentView( new GameSurfaceView(this) );
の引数の引数を変更したら動きました。
つまりView継承しているクラスは一つしかセットできなくて、引数にセットしたViewクラスでしかタッチイベントは拾えない
ってことでいいんですかね・・・
動いたのでとりあえずは解決にしておきます
見ていただいた方、すいませんでした
javaもandroid開発も初めてなもので・・・

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: android開発、タッチイベントが呼ばれない

#3

投稿記事 by ISLe » 12年前

AliceCoder さんが書きました:つまりView継承しているクラスは一つしかセットできなくて、引数にセットしたViewクラスでしかタッチイベントは拾えない
ってことでいいんですかね・・・
そんなことはありません。
タッチイベントに限らずイベントを拾えるのは画面に表示されているViewです。

setContentViewにレイアウトIDを指定したり、自分で入れ子にしたりすれば複数のViewを画面に表示できます。
タッチイベントは上位にあるViewから順に通知されて最後はActivityに通知されます。
onTouchEventの戻り値をtrueにするとそれより下位に通知されなくなります。

AliceCoder
記事: 51
登録日時: 13年前

Re: android開発、タッチイベントが呼ばれない

#4

投稿記事 by AliceCoder » 12年前

ISLeさん解説ありがとうございます

なるほどそういったやり方もあるのですね
レイアウトを絡めたプログラミングができると開発が楽しくなりそうですね
レイアウト関係のところも勉強してみます

とりあえず今はタッチイベントという自作クラスをシングルトンで作って、サーフェイスビューのonTouchEvent内でにモーションイベントをタッチイベントに渡す設計になっています

閉鎖

“C言語何でも質問掲示板” へ戻る