2011-09-09 16 views
1

を私は動的にキャンバスを作成します。キャンバスを追加アンドロイド

Canvas canvas = new Canvas(); 

しかし、どのように私は自分のLinearLayoutに追加することができますか?

LinearLayout ll = new LinearLayout(this); 
+0

なぜあなたはあなたの代わりにそこに着く代わりに、あなたの視野のdispatchDraw/onDrawをオーバーライドする新しいキャンバスを必要とし、キャンバス上に描画していますか? – asenovm

答えて

0

これは以前の回答(これは完全に無効)を置き換えたものです。 Canvasはレイアウトに追加するものではありません。 (J2SEに慣れていれば、それはAndroidのjava.awt.Graphicsに類似しています)。

おそらく、独自の描画を行うことができるビューを追加することができます(Canvasを使用)。そのためにはSurfaceViewを使用するか、hereのように独自のカスタムViewクラスを定義することができます。

+0

説明\t場所\tリソース\tパス\tタイプ CanvasタイプのsetLayoutParams(ViewGroup.LayoutParams)メソッドは未定義です – JeffLemon

+0

おっと。私の答えを改訂しました。 –

+0

ええ、下の私の答えを参照してください表面のビューが必要とそれを描画するためにキャンバスを追加することができます。 – JPM

4

あなたは、簡単な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); 
      } 
    } 
} 
+0

これは、この記事を読む前に私が知りませんでしたSurfaceViewのすばらしい返答と良い紹介です。ここに、完全な例を示します。http://www.droidnova.com/playing-with-graphics-in-android-part-ii160.html – stackoverflowuser2010

0
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 
} 

} 
関連する問題