Androidの2Dグラフィックスについてもう少し

こんにちは、Habrの読者の皆さん!



少し前にAndroidのプログラミングを勉強し始め、少し前に、まだ開始していないすべての人と解決策を共有したい問題に遭遇しましたが、このプラットフォーム用のアプリケーションの開発に専念する予定です。



理論のビット


1)通常、Android向けの2Dグラフィックスの基本を探すと、Viewクラスの拡張の例が見つかります。 この場合、実際には、静的な画像を描画するか、既存の画像を表示します。



2)Canvasクラスを使用して描画が行われます。 類推に移ると、これはまるでミューズに触発されたかのように、傑作を作成するキャンバスです。 このトピックでは傑作を作成しませんが、相互作用の基本の概要を説明します。



3)作成されたクラスのオブジェクトを画面に追加することにより、図面が画面に表示されます。



Androidのグラフィックスの基本についてはすでに説明したことを思い出してください。 既存の記事を少し補足しましょう。



問題


私は熱心にさまざまな興味深いタスクをやっていましたが、私は混乱するタスクに直面しました。 その本質は、「傑作」を既に作成された領域に直接持ち込み、ボタンをクリックするだけで図面を変更するなど、一見すると非常に些細なことでした。



基本的に、すべてのリンクはビューを拡張するクラスへの出力でいっぱいであり、既存のエリアに追加しないため、私は喜んでため息をついてマニュアルを勉強しましたが、この問題に役立つものは見つかりませんでした。



問題を定義したので、それを解決し始めます。



問題解決


作業を説明するために、タスクを定式化します。 ボタンを押すたびに三角形が表示されます。



したがって、まず、必要なパッケージをインポートしますが、多くの場合、必要に応じて直接インポートします。



import java.util.Random; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.View; import android.view.ViewGroup.LayoutParams;
      
      







素晴らしい。 次に、クリックするボタンを作成する必要があります。 /res/layout/activity_main.xmlに移動し、必要なデータを追加します。 たとえば、次のように:



 <Button android:id="@+id/Button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/TextView1" android:layout_below="@+id/TextView1" android:layout_marginTop="35dp" android:onClick="onClick" android:text="@string/click" />
      
      







ここで、TextView1はデフォルトのプロジェクトから残っている標準的なものです。 これで、ボタンをクリックすると、onClickメソッドが呼び出され、新しい三角形を表示する必要があります。



しばらくWebを検索した後、Viewを拡張するクラスが既存のレイアウトに描画する例を見つけることができなかったため、気が狂い、既存のタスクを少しやり直すことにしました。



まず、2番目のクラスを作成し、DrawTriangles、コンストラクター、onDrawメソッドなどの名前を付けます。実際には、ここで描画します。



 import android.content.Context; import android.graphics.Canvas; import android.view.View; public class DrawTriangles extends View { public DrawTriangles(Context context) { super(context); } @Override public void onDraw(Canvas c) { super.onDraw(c); } }
      
      







次に、三角形の描画について考えます。 タスクは非常に簡単であり、多くのストレスを必要としません。 6つの座標を追加し、それらを接続する線を描画します。



 float x = 350; float y = 250; float x1 = 950; float y1 = 250; float x2 = 950; float y2 = 1050; paint.setColor(Color.BLUE); c.drawLine(x, y, x1, y1, paint); c.drawLine(x1, y1, x2, y2, paint); c.drawLine(x2, y2, x, y, paint);
      
      







すべての準備が整いました。メインクラスを使用できます。



onClickメソッドを追加します。



 public void onClick(View v){ }
      
      







次に、彼が電話をしたときに、画面に描かれた三角形を追加する必要があります。 明らかに、これにはDrawTrianglesクラスのオブジェクトが必要です。



 DrawTriangles d = new DrawTriangles(this);
      
      







次に、受け取ったアイテムを画面に追加する必要があります。 setContentViewメソッドは知っていますが、要素を追加するのではなく、それらを他のすべてのものに置き換えるため、私たちには適していません。 考えた後、確かに、addContentViewメソッドが存在するという結論に達しました。 そして、ああ、そういう方法があります。 それを見てみましょう:



 public void addContentView (View view, ViewGroup.LayoutParams params)
      
      







最初の要素は追加するもので、2番目は表示オプションです。 三角形を描く必要があるため、特に倒錯することはありません。

 addContentView(d,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
      
      







素晴らしい。 今では、アプリケーションを起動して、何が起こったのかを楽しむだけです。



結果


画像



ボタンをクリックした後(別の三角形が表示されます!このトピックでは、直角三角形の作成について説明します):



画像



私のような人が必要な資料を探すのに役立つが、そのような操作に時間を無駄にしないことを願っています。 成功!



All Articles