[Tips]
http://www.ore-memo.com/914.html
bmp = BitmapFactory.decodeResource(res, R.drawable.back); WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); Display dp = wm.getDefaultDisplay(); dp_w = dp.getWidth(); dp_h = (dp_w / 2) * 3; bmp = Bitmap.createScaledBitmap(bmp, dp_w, dp_h , true);[edit]
LinearLayout l = new LinearLayout(this); l.setOrientation(LinearLayout.VERTICAL); setContentView(l); screen = new Screen(this); l.addView(screen);[edit]
setContentView(R.layout.activity_main);[edit]
http://d.hatena.ne.jp/koko_u/20120101
CanvasクラスのコンストラクタにBitmapクラスのインスタンスを与えます。そうすることでこのCanvasオブジェクトに描画した内容は画面ではなくBitmapに描画されることになります。
View のバックグラウンドに描画するだけです。
ImageView の場合は、content に対して描画します。
Canvas を使うと、Window に配置される Bitmap へ直接描画することができます。
まずは、Bitmap とそれに対応する Canvas インスタンスを作成します。
Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); // 新規作成 Resources r = getResources(); Bitmap b = BitmapFactory.decodeResource(r, R.drawable.img1); // リソースから取得
Canvas c = new Canvas(b); //BitmapからCanvasを生成 //↑と同義 c = new Canvas(); c.setBitmap(b);
これで、この Canvas に対する描画処理が Bitmap に反映されるようになります。
また、Bitmap の内容を Canvas に反映させることもできます。
これには、Canvas.drawBitmap(Bitmap, ...) メソッドを使います。
Canvas クラスは、drawBitmap, drawRect, drawText など様々な描画メソッドを持っています。
//ぬりつぶす c.drawColor(Color.BLACK); //Paintオブジェクトで図形をcanvasに描画 Paint paint = new Paint(); c.drawCircle(100, 100, 100, paint); //テキストをcanvasに描画 c.drawText("90mSv/h", 200, 100, paint); //Bitmapをcanvasに描画 c.drawBitmap(bmp, 0, 0, null);
ImageView に貼りつける。
//BitmapをImageViewに描画 ImageView image = (ImageView)findViewById(R.id.imageView1); image.setImageBitmap(bmp);
このインターフェイスを持つ実装クラス(例えば ShapeDrawable)に対して処理を行った後
Drawable.draw(Canvas) を呼び出すことによって、その内容を Canvas に反映させることができます。
もしアプリケーションがそれほど多くのフレームレート数を要求しない場合
カスタム View に対して onDraw() メソッドを実装してその中で Canvas に描画する
再描画が必要になったら invalidate() メソッドを呼び出します。※「すぐに」呼び出されることは保障されていません
onDraw(Canvas) の中で、この Canvas インスタンスに対して描画処理を行いましょう。
このメソッドが終わると、Android フレームワークは Canvas の内容をBitmap に反映させ、画面に表示します。
メインスレッド以外から invalidate() メソッドを呼び出す場合は、代わりに postInvalidate() を呼び出しましょう
SurfaceView を使うことで、描画処理を別スレッドで処理できるようになります。
androidアプリでImageViewに表示されている画像を、Bitmap形式で取り出す方法です。
// idからイメージビューを取得。 ImageView imageView = (ImageView)findViewById(R.id.[ImageViewのID]); // getDrawableメソッドで取り出したものを、BitmapDrawable形式にキャストして保存。 BitmapDrawable bd = (BitmapDrawable)imageView.getDrawable(); // getBitmapメソッドでビットマップファイルを取り出す。 Bitmap bmp = bd.getBitmap();