SurfaceViewのrun内からの変数アクセスについて(android)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hy

SurfaceViewのrun内からの変数アクセスについて(android)

#1

投稿記事 by hy » 13年前

初めまして。

androidアプリでボタンが押されたら描画を変更するような画面をSurfaceviewを利用して作ろうとしています。

ボタンから変数をセットするところまではうまくいっているのですが、
その変数をrun内からアクセスすると値が取得できずに困っております。


下記のpublic void setId(int id)部分が実際にボタンが押された場合にactivity側から呼び出される関数で、
この時点ではMySurface内のidに値がセットされていることが確認できているのですが、
run内でidにアクセスすると0が返ってきて、値が取得できません。

ご教示いただけますと幸いです。

よろしくお願いいたします。

コード:

public class MySurface extends SurfaceView implements SurfaceHolder.Callback, Runnable  {

    Thread thread;
    boolean isDrawable = true;
    int id;

    public MySurface(Context context, AttributeSet attrs) {
        super(context, attrs);

        init();
    }

    /** 初期化 **/
    private void init(Context context){
        getHolder().addCallback(this);
        setFocusable(true);
        id = 0;
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    	thread = new Thread(this);
    	thread.start();
    }


    @Override
    public void run() {
    	while(isDrawable){

                Log.i("DRAW", "in run:" + id);
    		Canvas canvas = null;
    		try{
    			// ホルダーからキャンバスの取得
    			canvas = getHolder().lockCanvas();
    			// 描画処理
    			if(canvas != null){ draw(canvas); }
    		}finally{
    			if(canvas != null){
	    			// 描画内容の確定
    				getHolder().unlockCanvasAndPost(canvas);
    			}
    		}
    	}
    }

    /** 描画処理 */
    @Override
    public void draw(Canvas canvas) {
    	if(canvas != null){
		//描画処理
    	}
    }


    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    	isDrawable = false;
    	while (thread.isAlive());
    	thread = null;
    }

    public void setId(int id){
    	this.id = id;
        Log.i("SELECT BTN", "in set func:" + id);
        Log.i("SELECT BTN", "in set func:" + this.id);
    }

    public int getId(){
    	return id;
    }
}

hy

Re: SurfaceViewのrun内からの変数アクセスについて(android)

#2

投稿記事 by hy » 13年前

すいません。

自己解決いたしました。
呼び出し元Activityのインスタンスの問題でした。

お騒がせして大変申し訳ございません。

閉鎖

“C言語何でも質問掲示板” へ戻る