6

こんにちは、みんな、

Android向けの開発を始めたばかりです。iPhoneアプリケーションの1つを移植しようとしていますが、実行時にビュー(XMLで宣言されていないビュー)を描画する方法がわからなくなっています。基本的にはシンプルな長方形を描きたいのですが、描いた後はフレームを操作できるようになります。

これが本当に本当に単純な質問である場合は申し訳ありませんが、ここでiPhoneSDKに相当するものを見つけることができないようです。

前もって感謝します!

4

1 に答える 1

7

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 つのスレッド、連続アニメーションの実装方法を示す単純なゲームです。

于 2010-03-29T16:24:29.993 に答える