2011-11-16 13 views
5

En mi ejemplo, cuando presiono un botón, se muestra una forma, pero cuando presiono otro botón, la forma anterior se borra. Quiero que la forma persista cuando se presiona otro botón . Estoy usando el método invalidate() después de que se muestre cada forma. ¿Puede darme una solución? A continuación se muestra la actividad que he utilizado.Los gráficos deberían persistir cuando se presiona otro botón Activado

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); 
    } 

}

y mi clase que se extiende Vista es el siguiente

MyDrawView clase pública se extiende Ver {

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); 
} 

}

Respuesta

0

Creo que el lienzo se borra cada se llama al tiempo onDraw.

Un método para resolver el problema es conservar el estado realizando sus operaciones de dibujo en un mapa de bits global, y onDraw dibujaría el mapa de bits en el lienzo. Esto no es mucho trabajo, y para un ejemplo vea la respuesta aceptada here.

Tema de Desarrolladores de Android sobre los modelos arrastrables here.

Cuestiones relacionadas