2011-09-16 14 views
1

CanvasオブジェクトをonDraw()メソッドに保存しようとしています。 これは、私がonDrawメソッドでforeachループを使用しているためです: canvas.DrawText(textitem、x、y、textpaint);
は(私はイムは、マスクされた領域の周りにテキストを描画するので、これをしなければならない)onDraw()にキャンバスを保存する。

今しようとして何イムこれです:

@Override 
public void onDraw(Canvas canvas) 
{ 
if (hasrun = false) 
     { 
      for(CustomTextViewDrawItem item : drawItemList) 
      { 
       canvas.drawText(item.Text, item.X, item.Y, textPaint); 
      } 

      if (eLabel.backgroundGradient != null) 
      { 
       canvas.drawPath(path, fillPaint); 
      } 
      canvas.save(); 
      savedCanvas = canvas ; 
     } 
     else 
     { 
      canvas = savedCanvas; 
     } 

     hasrun = true; 
     super.onDraw(canvas); 
} 

デバッグするとき、私はそれがOKに見えますが、空出てくる参照してください。 これを行うにはどうすればよいでしょうか?

+0

は、あなたがsaveから何を期待します() 関数?たぶんあなたはそれがどのように動作するか誤解します。 –

+0

はいマウスが正しいです、私はあなたがcanvas.save()を誤解していると思います。 – user370305

+0

あなたは何をしようとしていますか?キャンバスをアクティビティに追加する場所と、2つのキャンバスフィールドを宣言する方法を投稿してください。 –

答えて

0

あなたはビットマップを保存しようとすることができます(私はsuper.onDraw(キャンバス)を呼び出す方が良いと思い、法上の開始時に、あなたのビューに関連する図面が上になるので)

 

@Override 
public void onDraw(Canvas canvas) 
{ 
     super.onDraw(canvas); 
     if (savedBitmap==null){ 
      savedBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Config.ARGB_8888); 
      Canvas canvasToSave = new Canvas(savedBitmap) 
      for(CustomTextViewDrawItem item : drawItemList){ 
       canvasToSave.drawText(item.Text, item.X, item.Y, textPaint); 
      } 

      if (eLabel.backgroundGradient != null){ 
       canvasToSave.drawPath(path, fillPaint); 
      } 
     } 
     canvas.drawBitmap(savedBitmap, 0, 0, new Paint()); 
} 
 
+0

ありがとうございます、このメソッドは正常に動作しているようです。 しかし、それは新しい問題を引き起こします。 OutofMemoryErrorは正確です。 このプロセスでは外部割り当てが大きすぎます。 多くのビットマップ割り当てにはそうだと思います。 また、私はsuper.Ondraw(キャンバス)を最初に置くとちょっと奇妙ですが、バックグラウンドはうまく描画されますが、テキストは表示されません。 最後に置くことは意図どおりに機能します...なぜそれができますか? – ron

+0

コードhasrun = falseを使用していますか?hasrun == false –

+0

いいえ、私はその部分を削除しました。 ビットマップを今チェックして – ron

2

たぶんそれは、このためです:私は推測

if (hasrun = false) 

あなたの代わりにこれを実行するつもり:

if (hasrun == false) 
+0

ありがとう:)これも明らかに問題でした。 – ron

+0

それは私が常に 'if(false == hasrun)' =と書く理由です –

関連する問題