Android 2D Graphics基礎
Andoird による2D Graphicsの基礎です。English version
Java では, AWTなどにより画面にGraphics Contextを利用して座標指定などをして描画するなどしていました。Androidの場合もだいたい同じです。
Viewの拡張クラスを作って
まずAWTでの復習です
public void paint( Graphics g ) { Graphics2D g2 = (Graphics2D)g; Ellipse2D e = new Ellipse2D.Doule(x,y, w, h); g2.setPaint(Color.gray); g2.fill(e); g2.setPaint(Color.black); g2.draw(e); }
これはコードの一部ですが, GraphicsをGraphics2Dに変換してそれに対して処理を行います。
Androidではどうでしょうか, Viewクラスを拡張して, onDrawメソッドをOverrideして描画します。
ここで理解しておきたいことは, こいつはViewなのです。ですので, Viewに付属する処理であればなんでもできます。
イベントも追加できますしね。
Canvasというオブジェクトに対して描画のコードを入れます。上でいうGraphics2Dでしょうか。
ひな形はこんな感じです。
public class DrawView extends View { public DrawView ( Context context ) { super(context); } @Override protected void onDraw ( Canvas canvas ) { //super.onDraw(canvas); // Draw something } }
描画処理はonDrawメソッド上に書きます。
簡単な例として円でも描画してみます。
public class DrawView extends View { private Paint paint; private RectF rect; public DrawView ( Context context ) { super(context); paint = new Paint(); rect = new RectF(0f, 0f, 100f, 100f); // left, top, right, bottom } @Override protected void onDraw ( Canvas canvas ) { //super.onDraw(canvas); canvas.drawColor(Color.WHITE); // Background color // If use new instance, // new RectF(0f, 0f, 100f, 100f) // Avoid object allocations during draw paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLUE); canvas.drawOval(rect, paint); } }
Paintというのが出てきました。いわゆるペンのようなものです。AWTでもそんなのがあった気がします。
このコードではコンストラクタでペンを作成,
ちなみにonDrawメソッドでインスタンスを作成すると, “Avoid object allocations during draw”というWarningが出ます。
drawする度に, インスタンスを作るんじゃねえよ。という警告ですが, 無視していただいても動作します。
気になるようであればnew は別のところでやりましょう。
利用するActivityに貼付けます。(一部のみ)
@Override protected void onCreate ( Bundle savedInstanceState ) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); addContentView(new DrawView(this), new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); }
参考になったURL
AllAbout