2011-01-28 23 views
12

Bien, este es el trato. Quiero mover elementos en mi clase de galería extendida para cambiar el orden de las imágenes. La forma en que estoy haciendo ahora:onDraw() en Vista dibuja detrás del diseño

  • de pulsación larga quitar el elemento seleccionado en ese momento,
  • uso onDraw() para dibujar la misma imagen para que pueda moverlo usando onTouchEvent()
  • sobre la liberación de añadir el artículo de nuevo

Esto funciona bien pero el problema es que cuando se utiliza el método onDraw() dibujará la imagen detrás de los elementos de la galería. ¿Hay alguna manera de cambiar la prioridad de lo que se dibuja?

+0

¿Estás llamando super.onDraw() después de hecho el dibujo de la imagen? – pankajagarwal

+0

Bueno, la galería dibuja la imagen en la galería, así que no tengo control sobre eso. Solo quiero dibujar esas imágenes desde la clase de galería extendida – Nick

Respuesta

33

Bueno, yo descubrí esto después de ir en una dirección totalmente diferente =/

Aquí está la solución para las personas que tienen el mismo problema:

en el constructor (o en cualquier otro lugar de inicializar el componente) establece setWillNotDraw(false) y anula dispatchDraw(). dispatchDraw() dibuja los ViewGroup niños para que pueda decidir si desea dibujar detrás o una parte superior de las otras vistas.

ejemplo tomado de Custom drawing on top of Gallery view (and it's child views)

@Override 
protected void dispatchDraw(Canvas canvas) { 
    super.dispatchDraw(canvas); 

    // do your drawing stuff here 
    canvas.drawPath(mPath,mPaint); 
} 
+2

+1, ya que esta información es difícil de encontrar mediante la búsqueda. Usó este enfoque con éxito para dibujar en la ayuda de la pantalla en la parte superior de un GridView. Error menor: setWillNotDraw (falso) debe ser llamado; willNotDraw() es el getter para ese mismo parámetro. N.B .: setWillNotDraw (false) deshabilita las optimizaciones que suponen que un ViewGroup depende completamente de sus vistas secundarias para dibujarse. – Carl

+0

Comparta más ejemplos de código. Es realmente fácil de entender mirando el código. +1 ambos –

+0

Nick, ¿todavía lo recuerdas? ¿anulas dispatchDraw() en las imágenes de la galería o en la vista personalizada? ¿O estás haciendo todo en una vista? Cualquier ayuda apreciada – quinestor

Cuestiones relacionadas