未分類

Android 図形、画像の描画

投稿日:

    

ソースコードの解説

GraphicsExはプログラムの本体となるクラスです。

GraphicsView.javaを解説します。

ラインの描画(25行目) 描画前に「ライン幅」と「描画スタイル」と「色」を指定しておく必要があります。

描画する線の太さを指定するには、PaintクラスのsetStrokeWidth()メソッドを使います。

描画スタイルを指定するには、setStyle()メソッドを使用。

  • Paint.Style.FILL        塗りつぶし
  • Paint.Style.FILL_AND_STROKE 塗りつぶしとライン
  • Paint.Style.STROKE      ライン

ラインを描画するには、CanvasクラスのdrawLine()メソッドを使用。

パスの描画(30行目) 描画スタイルにSTROKEを指定後、PaintクラスのdrawPath()メソッドを使用。

Path()クラスは、複数の頂点座標(XY座標)を保持するパス情報のクラスです。

  • moveTo()メソッド パスの開始座標の指定
  • lineTo()メソッド  終点からのラインを追加

四角形の描画(40行目) CanvasクラスのdrawRect()メソッドを使用。

Rectクラスは、左上のXY座標と右下のXY座標を保持する四角形情報のクラスです。ラインのみのスタイルはSTROKE、塗りつぶしはFILLを指定します。

同様に角丸四角形の場合は、CanvasクラスのdrawRoundRect()メソッドを使用。RectFクラスは、float型の四角形情報のクラスです。

円の描画(58行目) CanvasクラスのdrawCircle()メソッドを使用。

ラインのみはSTROKE、塗りつぶしにするときはFILLを指定します。

  実行結果

イメージの描画

今回使用する画像ファイルは次の1枚です。そして、コピペでSample.pngを配置します。resフォルダ下に配置した素材は「リソース」と呼ばれ、ビルド時にアプリの実行ファイルに付加されます。

メニューで「新規」→「ディレクトリー」で「drawable-nodpi」という名前のフォルダを作成してください。

ソースコード

ImageExクラスは、プログラムの本体です。

画像ファイルの読み込み(18行目) リソースの画像ファイルを読み込むには、BitmapFactoryクラスのdecodeResource()メソッドを使用します。リソースオブジェクトは、ContextクラスのgetResources()メソッドを取得します。

リソースIDは、res/drawableフィルダに配置したファイルを「R.drawable.ファイル名(拡張子なし)」の書式で指定します。「sample.png」のリソースIDは、「R.drawable.sample」となります。

イメージの描画(25行目) CanvasクラスのdrawBitmap()メソッドを使用します。

イメージの拡大縮小描画(27行目) 描画元領域と描画先領域を指定するdrawBitmap()メソッドを使用します。

  実行結果

ソースコード

SurfaceViewExクラスは、プログラムの本体となるクラスです。

SurfaceViewViewクラス

SurfaceViewViewクラスは、ビューとなるクラスです。

サーフェイスビューの準備 (11行目)ViewクラスでなくSurfaceViewクラスを継承します。そして、サーフェイスビューの状態変化時のイベント処理を行うSurfaceHolder.Callbackインターフェイスを実装します。

サーフェイス生成時にスレッドの生成、サーフェイス破棄時にスレッドの解放を行っています。

サーフェイスホルダーの作成 (29行目)サーフェイスホルダーを取得するには、SurfaceViewクラスのgetHolder()メソッドを使用します。

取得したサーフェイスホルダーにaddCallback()メソッドで、サーフェイスイベントの通知先を指定します。

スレッドの開始 (36行目)1つのプログラムで複数の処理を同時に行っているように見せる時に利用します。

Threadクラスのstart()メソッドを呼ぶことにより、run()メソッドがあたかも並列して処理されているかのように実行されます。

ダブルバッファリング (64行目)描画命令を実行ごとに画面に反映させるのではなく、複数の描画命令をまとめて画面に反映させることで、画面のチラつきを防ぐ処理です。

スリープ 数ミリ秒間プログラムの処理を止めたい時は、Threadクラスのsleep()メソッドを使います。今回は、30ミリ秒スリープしています。

実行結果

いかがでしょうか。後半説明したSurfaceViewは、バックグラウンドスレッドでも描画可能です。常に更新される(アニメーション、ゲーム)に最適です。

-未分類

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

サンプルイメージ

変数

変数のしくみを知る プログラムを実行するとき、いろいろな値を記憶させながら処理をしていきます。例えば ユーザーが入力した数値を画面に出力する というプログラムについて考えてみましょう。まず、数値をどこ …

サンプルイメージ

配列のしくみ①

プログラムの中ではたくさんのデータを扱う場合があります。例えば、50体のキャラクターの攻撃力や体力や属性を扱うプログラムを考えてみましょう。 たくさんの変数が登場するので、コードが複雑で読みにくくなり …

サンプルイメージ

論理演算子

これまでいろいろな条件判断文を記述してきました。もっと複雑な条件を書ければ便利な場合があります。 スコアが「Sランク」であり、かつ、ゴールドがあったら・・・ →最強の装備にする このような複雑な条件を …

サンプルイメージ

配列の応用

配列の要素数を調べるコードを記述します。配列の要素数(ハコの数)は、配列の長さ(大きさ)と呼ばれています。 Javaでは、配列要素に.(ピリオド)をはさんでlengthと記述すると、配列の要素数をあら …

サンプルイメージ

練習問題(インターフェイス)

     練習11-1 下記のコードの実行結果がどう出力されるかを答えてください。 練習11-2 Shape.java 図形を表すインターフェイスShapeを作成してください。このインターフェイスでは …