Androidアプリ作成講座 8-円を描画する
講座のプログラムも終わりが近づきました。今回は、円を描画してみます。円は、画面の縦横で短い方の幅の半分になるような円を描画します。デバイスによって解像度が違うため、縦横サイズを測ってから円を描画します。
円は画面の上端に接して、左右は中央になるように描画します。
1.SurfaceViewソース
package kunimiyasoft.circletest; import android.content.Context; import android.view.SurfaceView; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Color; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder; // 画面サイズ private int screenWidth ; private int screenHeight ; public MySurfaceView(Context context) { super(context); holder = getHolder(); holder.addCallback(this); } // 変化があった時 @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { screenWidth = width ; screenHeight = height ; myDraw() ; } // 作成された時 @Override public void surfaceCreated(SurfaceHolder holder) { } // 破棄される時 @Override public void surfaceDestroyed(SurfaceHolder holder) { } public void myDraw() { int radius ; int circle_x ; int circle_y ; // 円の半径と座標の位置を計算する if (screenWidth < screenHeight) { radius = screenWidth / 4 ; } else { radius = screenHeight / 4 ; } circle_x = screenWidth / 2 ;</span> circle_y = radius ;</span> Canvas canvas = holder.lockCanvas(); Paint paint = new Paint(); // 円の描画 paint.setStyle(Paint.Style.STROKE); // 塗りつぶし無し paint.setColor(Color.argb(255, 0, 0, 0)); // 色は黒で不透明 paint.setStrokeWidth(5) ; // ペンの太さ canvas.drawCircle(circle_x, circle_y, radius, paint); // 元に戻す paint.setColor(Color.BLACK); paint.setStyle(Paint.Style.FILL); // 塗りつぶし holder.unlockCanvasAndPost(canvas); } }
2.画面サイズの取得
// 画面サイズ
private int screenWidth ;
private int screenHeight ;
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
screenWidth = width ;
screenHeight = height ;
画面のサイズを保持するメンバ変数を用意しておいて、surfaceChanged関数でサイズを受け取ります。
3.円の大きさと座標の計算
int radius ;
int circle_x ;
int circle_y ;
// 円の半径と座標の位置を計算する
if (screenWidth < screenHeight) {
radius = screenWidth / 4 ;
} else {
radius = screenHeight / 4 ;
}
circle_x = screenWidth / 2 ;
circle_y = radius ;
myDraw関数で、円のサイズと位置を計算します。縦と横の幅が狭い方を基準にして、その幅の半分の円の半径を計算しています。
また、円の座標は、上端に接するように、左右は中央になるように計算しています。
これはAndroidの仕様ではなく、今回の仕様ですので、自由に変えても構いません。
4.円の描画
// 円の描画
paint.setStyle(Paint.Style.STROKE); // 塗りつぶし無し
paint.setColor(Color.argb(255, 0, 0, 0)); // 色は黒で不透明
paint.setStrokeWidth(5) ; // ペンの太さ
canvas.drawCircle(circle_x, circle_y, radius, paint);
// 元に戻す
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL); // 塗りつぶし
前の投稿で描画した文字の行は削除してください。
ブラシの定義を行います。まず、円は塗りつぶさない設定にします。そして、円のカラーを定義しています。argb関数を使うことで、自由な色を設定することができます。また、透明度の指定も可能です。
次に、ペンの太さを設定します。例では5ドットにしています。
そして、drawCircle関数で円を描画します。
描画が終わったら、ブラシを元に戻しています。
5.基本的なビューへの描画は今回で終了です
ソースの記述ができたら、ビルドして実行してみましょう。円が描画されました。
これで、キャンバスへ図形を描画する講座の大部分は終わりました。最後に円を動かすことをしますが、これは一気に内容が高度化するので、おまけと考えてください。
次回は、プログラムをいったんお休みして、デバッガの使い方を学びます。
(LIST)Androidアプリ作成講座
Androidアプリ作成講座 プロローグ
Androidアプリ作成講座 1-プロジェクトを作る
Androidアプリ作成講座 2-プロジェクトを確認する
Androidアプリ作成講座 3-エミュレーター環境を作る
Androidアプリ作成講座 4-SurfaceViewクラスを作成する
Androidアプリ作成講座 5-SurfaceViewをActivityにセットする
Androidアプリ作成講座 6-SurfaceViewがイベントを受け取れるようにする
Androidアプリ作成講座 7-キャンバス上で描画する
Androidアプリ作成講座 8-円を描画する
Androidアプリ作成講座 9-デバッガを使ってみよう
Androidアプリ作成講座 10-Animationクラスを使う
Androidアプリ作成講座 11-円移動のソース