こんにちは、みんな、
Android向けの開発を始めたばかりです。iPhoneアプリケーションの1つを移植しようとしていますが、実行時にビュー(XMLで宣言されていないビュー)を描画する方法がわからなくなっています。基本的にはシンプルな長方形を描きたいのですが、描いた後はフレームを操作できるようになります。
これが本当に本当に単純な質問である場合は申し訳ありませんが、ここでiPhoneSDKに相当するものを見つけることができないようです。
前もって感謝します!
2D グラフィックスを試したいようですね。そのためには、Canvas
. メソッドを介して Canvas の描画を制御できます。これによりinvalidate()
、カスタマイズしたメソッドをトリガーして全体を再描画するよう Android に指示しますonDraw()
。XML ファイルを使用したくないと述べていますが、それが Canvas に配置する最も簡単な方法です。XML ファイルでそのコンテンツを定義する必要はありませんが、レイアウト ファイルにそこにあることを伝えるだけです。Canvas をアプリケーションに配置する強力かつ簡単な方法は、View をカスタマイズすることです。たとえば、XML ファイルに<your.package.CustomView android:.../>
要素を含めます。CustomView extends View
次に、クラスを宣言します。やりたいどんな種類の描画でも、 onDraw() メソッドに入れます。
たとえば、長方形を描くには、次のようにします。
//First you define a colour for the outline of your rectangle
rectanglePaint = new Paint();
rectanglePaint.setARGB(255, 255, 0, 0);
rectanglePaint.setStrokeWidth(2);
rectanglePaint.setStyle(Style.STROKE);
//Then create yourself a Rectangle
Rect rectangle = new Rect(left, top, right, bottom) //in pixels
//And here's a sample onDraw()
@Override
public void onDraw(Canvas canvas){
rectangle.offset(2, 2);
canvas.drawRect(rectangle, rectanglePaint);
}
プログラムから invalidate() が呼び出されるたびに、ビューが再描画され、長方形が 2px 右下に移動します。注: 再描画は、メイン スレッドが「待機中」の場合にのみ発生します。つまり、無効化を数回呼び出すループがある場合、ビューはループが終了するまで実際には描画されません。これを回避することはできますが、さらに複雑になります。その方法の例として、Google の LunarLander サンプル ゲームを見てください。これは、カスタム ビュー、2 つのスレッド、連続アニメーションの実装方法を示す単純なゲームです。