を私は動的にキャンバスを作成します。キャンバスを追加アンドロイド
Canvas canvas = new Canvas();
しかし、どのように私は自分のLinearLayoutに追加することができますか?
LinearLayout ll = new LinearLayout(this);
を私は動的にキャンバスを作成します。キャンバスを追加アンドロイド
Canvas canvas = new Canvas();
しかし、どのように私は自分のLinearLayoutに追加することができますか?
LinearLayout ll = new LinearLayout(this);
これは以前の回答(これは完全に無効)を置き換えたものです。 Canvasはレイアウトに追加するものではありません。 (J2SEに慣れていれば、それはAndroidのjava.awt.Graphicsに類似しています)。
おそらく、独自の描画を行うことができるビューを追加することができます(Canvasを使用)。そのためにはSurfaceViewを使用するか、hereのように独自のカスタムViewクラスを定義することができます。
あなたは、簡単なaddViewでそれを行うことができますいずれか、または、あなたのグラフィックス描画を行うための新しいスレッドを必要とするような、より複雑な何かをしているならば、あなたはカスタムSurfaceView
<com.util.MyDraw
android:id="@+id/surfaceView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10px"
android:layout_marginLeft="10px"
android:layout_marginRight="10px"
android:layout_below="@+id/spinner1"
/>
を使用してXMLレイアウトに追加することができます
次に、SurfaceViewを拡張するMyDrawというクラスを作成します。そこには、スレッドを呼び出してペイントすることができます。
package com.util;
public class MyDraw extends SurfaceView implements Callback {
private MyThread myThread;
private SurfaceHolder holder;
private Paint paint;
Path path;
public LinkedList<Integer> list; {
list = new LinkedList<Integer>();
}
public MyDraw(Context context) {
super(context);
holder = getHolder();
holder.addCallback(this);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
paint.setColor(Color.GREEN);
path = new Path();
}
public void surfaceCreated(SurfaceHolder holder) {
myThread = new MyThread(holder, this);
myThread.setFlag(true);
myThread.start();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
public void surfaceDestroyed(SurfaceHolder holder) {
myThread.setFlag(false);
}
@Override
protected void onDraw(Canvas canvas) {
path.rewind();
path.reset();
if (canvas != null) {
canvas.drawColor(Color.BLACK);
if (list != null && list.size() > 0) {
path.moveTo(0, list.get(0));
int sec;
for(sec = 1; sec < list.size(); sec++) {
path.lineTo(sec, (list.get(sec)/divFactor));
}
canvas.drawPath(path, paint);
}
}
}
これは、この記事を読む前に私が知りませんでしたSurfaceViewのすばらしい返答と良い紹介です。ここに、完全な例を示します。http://www.droidnova.com/playing-with-graphics-in-android-part-ii160.html – stackoverflowuser2010
setContentView(canvasView); //add canvas view (set canvasView as main view)
linearLayout.addView(canvasView); //linearLayout add canvasView
public class CanvasView extends View{
public CanvasView(Context c){
super(c);
}
public void onDraw(Canvas canvas){
//do your draw methods
}
}
なぜあなたはあなたの代わりにそこに着く代わりに、あなたの視野のdispatchDraw/onDrawをオーバーライドする新しいキャンバスを必要とし、キャンバス上に描画していますか? – asenovm