描画した図形を表示後、描画の座標を変え、再描画することで図形を移動させたいと考えています。
SurficeViewを使うとよいとのことで、SurficeViewを採用することにしました。
移動を実現する前にまず静止画として図形を描画しようと考えましたが、図形が描画されない状況です。
プログラム自体にエラーはなく、デバッグでも描画(しているつもり)の処理の部分を通過していることを確認したため、未到達により処理がされていないことはないと考えています。
どの認識が間違っているのか、ご助言頂きたく存じます。
以下、ソースコード
MainActivity.java
package com.example.surfaceviewtest; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //SurfaceView のインスタンスを実体化し、ContentView としてセットする SampleSurficeView surfaceView = new SampleSurficeView(this); setContentView(surfaceView); } }
SampleSurficeView
package com.example.surfaceviewtest; import android.content.Context; import android.view.SurfaceHolder; import android.view.SurfaceView; public class SampleSurficeView extends SurfaceView { private SampleHolderCallBack cb; public SampleSurficeView(Context context) { super(context); SurfaceHolder holder = getHolder(); cb = new SampleHolderCallBack(); holder.addCallback(cb); } }
SampleHolderCallBack.java
package com.example.surfaceviewtest; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Log; import android.view.SurfaceHolder; import static android.R.attr.x; import static android.R.attr.y; public class SampleHolderCallBack implements SurfaceHolder.Callback, Runnable { private SurfaceHolder holder = null; private Thread thread = null; private boolean isAttached = true; @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 使わない(´・ω・`) } @Override public void surfaceCreated(SurfaceHolder holder) { this.holder = holder; thread = new Thread(this); thread.start(); //スレッドを開始 } @Override public void surfaceDestroyed(SurfaceHolder holder) { isAttached = false; thread = null; //スレッドを終了 } @Override public void run() { Log.w("ろぐ", "てすと"); Canvas c = holder.lockCanvas(); Paint p = new Paint(); c.drawColor(Color.BLUE); p.setStrokeWidth(8.0f); p.setStyle(Paint.Style.FILL); p.setColor(Color.RED); c.drawRect(200, 350, 220, 370, p); holder.unlockCanvasAndPost(c); } }
あなたの回答
tips
プレビュー