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); } }