2011-11-16 8 views
5

私の例では、ボタンを押すと形状が表示されますが、別のボタンを押すと以前の図形が消去されます。 。すべての図形が表示されたら、invalidate()メソッドを使用しています。私に解決策を教えてもらえますか?以下は、私が使った活動です。アクティビティ上の他のボタンが押されたときにグラフィックが維持されるべきである

public class StartMyDrawView extends Activity{ 
    MyDrawView mydrawview; 
    public static int action=0; 
    Intent netIntent; 
    LinearLayout draw ; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("StartMyDrawView", "OnCreate()"); 
     setContentView(R.layout.designgraphic); 
     draw = (LinearLayout) findViewById(R.id.linearLayout1); 
     Button btnLine=(Button) findViewById(R.id.button1); 
     Button btnCircle=(Button) findViewById(R.id.button2); 
     Button btnRectangle=(Button) findViewById(R.id.button4); 
     Button btnText=(Button) findViewById(R.id.button5); 

     btnLine.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       action=1; 
       draw.invalidate(); 
      } 
     }); 

     btnCircle.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       action=2; 
       draw.invalidate(); 
      } 
     }); 

     btnRectangle.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       action=3; 
       draw.invalidate(); 
      } 
     }); 

     btnText.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       action=4; 
       draw.invalidate(); 
      } 
     }); 

     mydrawview =new MyDrawView(this); 
     draw.addView(mydrawview); 
    } 

}

パブリッククラスMyDrawViewを見る私はキャンバスがそれぞれクリアされると思います{

Paint paint = new Paint(); 
int actionVal=0; 
public MyDrawView(Context context) { 
    super(context); 
} 

public void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 
    paint.setColor(Color.RED); 
    paint.setStyle(Paint.Style.STROKE); 
    if(StartMyDrawView.action==1) 
     canvas.drawLine(0, 0, 200, 200, paint); 
    if(StartMyDrawView.action==2) 
     canvas.drawCircle(150, 150, 50, paint); 
    if(StartMyDrawView.action==3) 
     canvas.drawRect(20, 20, 150, 150, paint); 
    if(StartMyDrawView.action==4) 
     canvas.drawText("JUST DEMO", 150, 150, paint); 
} 

}

答えて

0

を拡張し、次のように表示を拡張する私のクラスがあります時間onDrawが呼び出されます。

問題を解決する方法の1つは、グローバルビットマップで描画操作を行い、onDrawがビットマップをキャンバスに描画することです。これはあまり効果がありません。例として受け入れられた回答hereを参照してください。

ドロアブルに関するAndroidデベロッパーのトピックhere

関連する問題