2011-08-13 10 views
11

¿Cómo puedo dibujar un botón en la parte superior del lienzo en una vista personalizada? (Preferiblemente en el lado derecho medio) ¿Hay algo que tenga que llamar antes de hacer el botón.draw (canvas)?Botón de dibujo de Android a lienzo con vista personalizada?

public class MyClass extends View { 
    public Simulation(Context context) { 
      super(context); 
      pauseButton.setText("TestButton"); 
      pauseButton.setClickable(true); 
      pauseButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
      Log.i(TAG, "Button Pressed!"); 
      } 
      }); 
    public onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      pauseButton.draw(canvas); 
    } 
    } 

Gracias por su tiempo

+0

super.onDraw (canvas); – confucius

+0

'super.onDraw (canvas);' no solucionó el problema? @Nammari – unknownone

+0

¿Cuál es la situación actual? ¿Está dibujando atall? o dibujando en el lugar equivocado? – Ronnie

Respuesta

14

No puede insertar un botón en el lienzo. Canvas es una interfaz para mapa de bits o un buffer de mapa de bits para una vista. Solo puede dibujar otros mapas de bits o píxeles en él, no insertar un objeto o un widget.

hay algunas soluciones:

  1. como se sugiere Nikolay, utilizar un FrameLayout y crear dos capas (vistas), primero la vista personalizada y la segunda LinerView o RelativeView, que entrarán en la parte superior, donde se puede tener botones, etc

  2. dibujar una imagen de un botón R en la lona a continuación, utilizar onTouchEvent en la vista personalizada y la prueba de las coordenadas del tacto, a continuación, hacer algo ... un ejemplo para onTouchEvent aquí: Make certain area of bitmap transparent on touch

+0

¿Cómo agregaría mi vista personalizada al archivo xml? Gracias por su respuesta – unknownone

+1

Esa es una larga historia, tiene que buscar ejemplos ... pero básicamente crea una nueva etiqueta como .... en xml y luego crea una nueva clase llamada MyView extends View que tiene un constructor MyView (Context context, AttributeSet attrs) {super (context, attrs); ....} en este ejemplo simplemente agregue el constructor que mencioné: http://stackoverflow.com/questions/6308106/view-inflation-and-custom-views – Lumis

+0

Ok, ¡muchas gracias! – unknownone

4

¿Por qué necesita para sacar el botón de ti mismo? Utilice FrameLayout y simplemente tenga el botón superpuesto en su vista personalizada.

-1

probar este

public onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.save(); 
     pauseButton.draw(canvas); 
     canvas.restore(); 
} 
Cuestiones relacionadas