ImageView
今回はImageViewについて説明したいと思います。
Androidで図形などを直接描画して表示するには、Viewクラスか、SurfaceViewを使うのが適切だと思ってました。
しかし、実際にコーディングしてアプリケーションを動かしてみたところ、どうもうまくいかない。
Viewを実装したアプリケーションはちゃんと動きましたが、マシンに対する負荷が高く、図形を直接描画したりするのには向いてないようです。図で説明するとこんな感じです。
CPU使用率が100%になるということは、毎フレーム画面を更新しているせいですかね?ThinkpadX30なんかで開発してるのが悪い?
僕としては画面の更新は一回だけでいいんです。
SurfaceViewを使えばCPUの負荷が少なくて済むようですが、自分としては毎フレーム画面を更新する必要はないので(必要なときに一回だけ更新したい)、ImageViewクラスを使うことにしました。
自前で作成したBitmapを、ImageViewのsetImageBitmap()で渡してやれば任意の図形を描画して、一回だけ画面を更新する事ができます。
public class TestView extends ImageView { private Bitmap mBmp = null; public TestView(Context context, AttributeSet attrs) { super(context, attrs); setFocusable(true); requestFocus(); } private void drawChart() { int width = getWidth(); int height = getHeight(); int margin = 6; int r = (width/2 + height/2) / 3; int rxCenter = width / 2; int ryCenter = height / 2 - margin; //Bitmap画像を作成 if (mBmp == null) { mBmp = Bitmap.createBitmap( getWidth(), getHeight(),Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(mBmp); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); //背景を塗りつぶす paint.setColor(getResources().getColor(R.color.lightBlack)); canvas.drawRect(0.0f, 0.0f, width, height, paint); //円を描く paint.setColor(getResources().getColor(R.color.smoke)); canvas.drawCircle(rxCenter, ryCenter, r, paint); //ImageViewにセットする this.setImageBitmap(mBmp); } }