My Photo

« NHKの解説委員の意見は楽観的すぎると思う | Main | 第19節、新潟今期初の連勝、磐田今回は追いつけず »

July 27, 2011

Androidアプリ開発メモ007:Canvasへの描画

Canvas

2DグラフィックスはCanavas上に描く。実際の描画はCanvasに含まれるBitmapに対して実行される。
描画命令にはメソッド毎にそれと対応する図形(点、直線、矩形、楕円、etc...)を描くコマンドタイプと、図形の形状をパスで作成してから線を描くか内部を塗りつぶすようなパスタイプの2種類がある。パスタイプの描画はPostScriptやPDFで使われているグラフィックス機能と同等なものである。
View#onDraw()をオーバーライドしてCanvasに描画する。

android.view.Viewクラス
protected void onDraw(Canvas canvas)
描画するためにこれを実装せよ。
引数
  canvas  背景が描画されるキャンバス

Paint

Paintは描画に対する様々な属性
・色
・図形の場合、外枠だけか中を塗りつぶすのか
・文字の場合、フォント、文字サイズ、斜体の度合い
などを持つクラス。

Paintクラスの描画設定メソッド
メソッド 説明
setARGB(int a, int r, int g, int b) 色の設定
setColor(Color color) 色の設定
setStrokeWidth(float width) 線の幅を設定
setStrokeCap(Paint.Cap cap) cap=口金、ペン先の形の設定。Paint.Cap.ROUND=丸型、Paint.Cap.Square=角型、Paint.Cap.BUTT=ストロークはパスで終わりそれを超えて突出しない。
setStyle(Paint.Style style) 外形線のみ描画するか、中を塗りつぶすかの設定。Paint.Styl.STROKE=外形線のみ描画、Paint.Styl.FILL=中が塗りつぶされて外形線は描画されない、Paint.Styl.FILL_AND_STROKE=外形線は描画されて中も塗りつぶす。

Color

色はColorクラスで定義され、4バイトの整数値を持つ。各1バイトがA(アルファ)、R、G、Bである。
アルファ値は不透明の度合いを表し、0で完全な透明、255で完全な不透明である。

Canvasクラスの描画メソッド

下記のサイトが参考になる。
グラフィックス(5)-Canvasクラスのメソッドを使って図形を描画する - 愚鈍人

drawColor(int color)
drawRGB(int r, int g, int b)
指定した色で srcover porterduff mode を使ってCanvasのBitmap全体(現在のクリップに制限)を塗りつぶす。
srcover porterduff mode とは何ぞや?

drawArc()の注意
指定するRectFのもつ座標が左上と右下の座標でなければ描画されない。
つまり(100, 100, 200, 200)ならいいが、(200, 100, 100, 200)だと弧は描かれない。
drawRect()やdrawOval()ではこんなことはなく長方形や楕円は描画される。

drawBitmap()のsrcの意味
public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)
において、第2引数のsrcは、第1引数のbitmap全部を描画する場合はnullでよい。
bitmapのサブセットを使う場合はsrcにnull以外を指定する。
たとえばsrc=(0, 0, bitmapの幅 - 1, bitmapの高さ-1-10) とした場合、bitmapの下を10削ったものが描画される。

public void drawPath(Path path, Paint paint)
指定されたPathを指定されたPaintを使って描画する。

明示的に再描画する

View#invalidate()を呼びビューを無効にすること再描画することができる。
ただし、このメソッドで直ちに再描画されることが保障される訳ではない。メインスレッドがやらなければいけないことをやった後に再描画する。

パス

すでにあるパスは何度でも使える。
パスに特定の図形がベジェ曲線などを追加したり、すでにあるパスを移動・変形したりできる。
パスの線には向きがあり、塗りつぶしありの場合に塗りつぶされるかどうかに影響する。


参考ページ:グラフィックス(5)-Canvasクラスのメソッドを使って図形を描画する - 愚鈍人
porterduff modeについて:android.graphic.Shaderクラスについて - superdry memorandum :-D
invalidate()について:Android SDK の動かないコード(中級編) invalidate しても再描画されないエラー - 主に言語とシステム開発に関して

« NHKの解説委員の意見は楽観的すぎると思う | Main | 第19節、新潟今期初の連勝、磐田今回は追いつけず »

Androidアプリ開発」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/52325080

Listed below are links to weblogs that reference Androidアプリ開発メモ007:Canvasへの描画:

« NHKの解説委員の意見は楽観的すぎると思う | Main | 第19節、新潟今期初の連勝、磐田今回は追いつけず »

March 2017
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof