SurfaceViewのrun内からの変数アクセスについて(android)
Posted: 2013年1月12日(土) 15:59
初めまして。
androidアプリでボタンが押されたら描画を変更するような画面をSurfaceviewを利用して作ろうとしています。
ボタンから変数をセットするところまではうまくいっているのですが、
その変数をrun内からアクセスすると値が取得できずに困っております。
下記のpublic void setId(int id)部分が実際にボタンが押された場合にactivity側から呼び出される関数で、
この時点ではMySurface内のidに値がセットされていることが確認できているのですが、
run内でidにアクセスすると0が返ってきて、値が取得できません。
ご教示いただけますと幸いです。
よろしくお願いいたします。
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;
}
}