マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

タッチイベントを試す

Desire買ったんだしとりあえず、何かやってみたいと思い、タッチイベントを試すプログラムを作ってみた。触れられた所に四角形を表示するだけの単純なもの。描画はViewクラスのonDrawで、位置の取得はonTouchEventで行っている。位置を取得したあとはinvalidateで再描画を行う。以下Viewを継承したクラスのソース

package touch.test;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
import android.view.MotionEvent;

public class TouchView extends View{
    private int touchX = 0;
    private int touchY = 0;
    private static final int SIZE = 32;
    private static final int HALF_SIZE = TouchView.SIZE / 2;
	
    public TouchView(Context context){
    	super(context);
    	setBackgroundColor(Color.WHITE);
    	
    	setFocusable(true);
    }
    
    @Override
    public void onDraw(Canvas canvas){
    	int rectX = touchX >= HALF_SIZE ? touchX - HALF_SIZE : 0;
    	int rectY = touchY >= HALF_SIZE ? touchY - HALF_SIZE : 0;
    	rectX = rectX + SIZE < getWidth() ? rectX : getWidth() - SIZE;
    	rectY = rectY + SIZE < getHeight() ? rectY : getHeight() - SIZE;
    	
    	canvas.drawRect(rectX, rectY, rectX + TouchView.SIZE, rectY + TouchView.SIZE, new Paint());
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event){
    	touchX = (int)event.getX();
    	touchY = (int)event.getY();
    	
    	invalidate();
    	
    	return true;
    }
}

ついでにActivityも載せておく

package touch.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class TouchTest extends Activity {
    private TouchView touchView;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        
        touchView = new TouchView(this);
        setContentView(touchView);
    }
}