2009-03-31 13 views

Respuesta

6

Sí. Depende de lo que estás tratando de lograr.

Se puede hacer uso de las API estándar, pero esta funcionalidad no es parte de las API estándar. Es decir, no hay un método widget.DragOverHere() a menos que escriba uno.

Dicho esto, no sería terriblemente complicado de hacer. Como mínimo, necesitaría escribir una subclase personalizada de Ver e implementar dos métodos: onDraw(Canvas c) y onTouch(MotionEvent e). Un esbozo:

class MyView extends View { 

    int x, y; //the x-y coordinates of the icon (top-left corner) 
    Bitmap bitmap; //the icon you are dragging around 

    onDraw(Canvas c) { 
     canvas.drawBitmap(x, y, bitmap); 
    } 

    onTouch(MotionEvent e) { 
     switch(e.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     //maybe use a different bitmap to indicate 'selected' 
     break; 
     case MotionEvent.ACTION_MOVE: 
     x = (int)e.getX(); 
     y = (int)e.getY(); 
     break; 
     case MotionEvent.ACTION_UP: 
     //switch back to 'unselected' bitmap 
     break; 
     } 
     invalidate(); //redraw the view 
    } 
} 
0

Hasta cierto punto. Depende del grado de libertad que desee darle al usuario. Una solución que me viene a la mente es un TableLayout con celdas predefinidas. Un usuario puede tocar y arrastrar componentes. Al arrastrar un componente, solo querrá dibujar una imagen debajo del dedo del usuario, pero cuando lo suelte, elimine el componente de su anterior padre y agréguelo al nuevo padre utilizando los métodos para agregar/quitar de ViewGroup.

Si bien puede cambiar las vistas mediante programación, sería difícil/imposible cambiar de diseño sobre la marcha hasta donde yo pueda ver.

0

La forma en que he hecho esto es tener una disposición absoluta y luego simplemente actualizar la posición del objeto a medida que se arrastra. Tienes que implementar arrastrándote a ti mismo. Si los widgets tienen un orden natural (una barra de herramientas en la que desea poder arrastrar botones) puede apilar un diseño absoluto en la parte superior de la barra de herramientas y cuando se inicia el arrastre, lo agrega al diseño absoluto y cuando termina, lo vuelve a agregar al diseño original en la nueva posición.

Cuestiones relacionadas