Viewをイベントによって、再描画をする。

今回はViewをイベントに応じて動かしてみます。

circle

まず、以前作成したように丸を描画するViewクラスを作ります。

package in.andante.touchtest;

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

public class TouchCircle extends View {
 
 public int x = 100,y = 100;
 
 public TouchCircle(Context context){
 super(context);
 }
 
 protected void onDraw(Canvas canvas){  
 Paint paint = new Paint();  
 paint.setColor(Color.WHITE);
 paint.setAntiAlias(true);  
 canvas.drawCircle(x, y, 50, paint);  
 }
}

これを表示する為のメインのActivityクラスは以下のようになります。

package in.andante.touchtest;

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

public class TouchTest extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 TouchCircle touchcircle = new TouchCircle(this);
 setContentView(touchcircle);
 }
}

この円をタッチイベントによって追従する仕様を追加します。

タッチイベント自体はViewに既に含まれている。

public boolean onTouchEvent(MotionEvent e){}

で実装が可能です。

今回用いるタッチイベントは

MotionEvent.ACTION_DOWN:触る
MotionEvent.ACTION_MOVE:動かす
MotionEvent.ACTION_UP:離す

です。

MotionEvent.ACTION_DOWN:触る
MotionEvent.ACTION_MOVE:動かす
の時には、再描画を行います。

MotionEvent.ACTION_UP:離す
の時に、クリックイベントを発行します。

クリックイベントの発行はperformClick()で行えます。

package in.andante.touchtest;

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

public class TouchCircle extends View {
 
 public int x = 100,y = 100;
 
 public TouchCircle(Context context){
 super(context);
 }
 
 protected void onDraw(Canvas canvas){  
 Paint paint = new Paint();  
 paint.setColor(Color.WHITE);
 paint.setAntiAlias(true);  
 canvas.drawCircle(x, y, 50, paint);  
 }  
 
 public boolean onTouchEvent(MotionEvent e){
 switch(e.getAction()){
 case MotionEvent.ACTION_DOWN:
 x = (int)e.getX();
 y = (int)e.getY();
 invalidate();
 break;
 case MotionEvent.ACTION_MOVE:
 x = (int)e.getX();
 y = (int)e.getY();
 invalidate();
 break;
 case MotionEvent.ACTION_UP:
 performClick();
 break;
 default:
 break;
 }
 return true;
 }
 
}

今回はクリックイベントの発行は必要はありませんでしたが、一応で、中に含ませていただきました。

以上です。

  • written on 2011.04.13
  • category : 描画

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑