素人のアンドロイドアプリ開発日記

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

2011.04.13

今回は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;
 }
 
}

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

以上です。

同じカテゴリの記事を紹介します

角丸の四角を描画するグラデーションで塗るSurfaceViewを使って、リボンを作成してみる点で絵を描いておしゃれっぽい雰囲気のお絵かきリボンを作って指を中心にくるくるするandroidのbitmapについてまとめSurfaceViewを使ってみる。お絵かきアプリtipsお絵かきアプリで書いた絵を保存する。お絵かきアプリを作る。描画編3お絵かきアプリを作る。描画編2お絵かきアプリを作りたい。描画編絵を描画する。ドロイド君を書く絵を描画する。円を書いてみる。

カテゴリー:描画

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする