読者です 読者をやめる 読者になる 読者になる

Shut the fuck up and write some code

グダグダ言わずにコードを書きたいブログ

TouchEvent情報を取得するサンプルを作ってみた。

ASばっかり連投してますが、一応Androidも触ってますよ。OOP的思考がようやく出来るようになっておかげか、わりとコードを書くのも苦ではない。ただライブラリの仕様の理解まではなかなか到達しない。

で、サンプルを参考にしつつTouchEventと座標を拾えって標示してみるようなものを作ってみた。イベントと座標だけですが・・・・。

参考サイト
http://www.hakkaku.net/articles/20090212-348#more-348


onDrawがコールされるタイミングやらオブジェクトは宣言だけでなく初期化しないとダメとか、ASより厳密なので泣けてくる。
Activity→View→Canvasと画面状態管理や描画の流れがまだはっきりつかめない。invalidateがまだおまじないレベル。描画メソッドもよくわかってない、。
一番のハマリはEclipseがよくわからんということ!Eclispeの本買わんとダメか。まだ日本語化してないので素直にした方がいいのか。日本語化すると何ともいえない敗北感が・・・。


つか実機がない!ってのが一番の問題だ。


■ソース

package com.example.TouchTest;

import android.app.Activity;
import android.os.Bundle;
import android.content.*;
import android.graphics.*;
import android.view.*;


/** メインクラスの定義 */
public class TouchTest extends Activity {
    
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /** 描画クラスを設定 */
        TestTouchView view = new TestTouchView(getApplication());
        setContentView(view);
    }
}

/** 描画クラスの定義 */
class TestTouchView extends View {
    
	private String Action = "NONE";
	private Point p=new Point();
	
    public TestTouchView(Context c) {
        super(c);
        setFocusable(true);
        setBackgroundColor(Color.WHITE);
    }
    
    /** タッチイベントを処理 */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    	
    	/**座標取得*/
    	setMousePoints((int)event.getX(),(int)event.getY());
 
    	/**イベント取得*/
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            setAction("ACTION_DOWN");
            break;
        case MotionEvent.ACTION_UP:
            setAction("ACTION_UP");
            break;
        case MotionEvent.ACTION_MOVE:
            setAction("ACTION_MOVE");
            break;
        case MotionEvent.ACTION_CANCEL:
            setAction("ACTION_CANCEL");
            break;
        }
        return true;

    }
   
    @Override
    protected void onDraw(Canvas canvas) {
        
        Paint paint=new Paint();
        paint.setAntiAlias(true);
        paint.setTextSize(16);
        paint.setColor(0xFF000000);
        
        canvas.drawText("MouseEvent:"+getAction(),30,30,paint);
        canvas.drawText("x:"+getPoints().x+" y:"+getPoints().y,30,30*2,paint);
        
        invalidate();
    }

	public void setAction(String action) {
		System.out.println(action);
		Action = action;
	}

	public String getAction() {
		return Action;
	}
	
	public void setMousePoints(int x,int y){
		p.x=x;
		p.y=y;
	}
	
	public Point getPoints(){
		return p;
	}

}


コード書くのは楽しいですね。やっぱりエンジニアたるものコード書いてナンボだ。開発してこそだわ。