2011-10-08 7 views
20

Vengo de iOS, donde puedo simplemente reparar una vista en otra vista. Estoy tratando de descubrir el equivalente en Android. Quiero mover una imagen vista a un par de puntos en la jerarquía de vista cuando hago clic. Algo así como:Reparar una vista en Android: pasar de un diseño a otro

public boolean onTouchEvent(MotionEvent event) { 

    int action = event.getAction(); 

    //Tile touchBegan 
    if(action == MotionEvent.ACTION_DOWN) { 
     RelativeLayout rl = (RelativeLayout)(getParent().getParent()); 
     rl.addView(this); 
    } 
} 

Este es un ejemplo simplificado, por supuesto .. pero tratando de encontrar la manera de volver a los padres una vista bajo otro formato. He encontrado este ejemplo la búsqueda en torno al cual parece increíblemente complicado ..

http://blahti.wordpress.com/2011/02/10/moving-views-part-3/

+0

Para cualquiera googlear a aquí: si usted necesita para mantener la misma posición, es posible que mi ejemplo de código respuesta a continuación le ayudará. – Fattie

Respuesta

31

Si recuerdo mi viejo experiencia iOS derecho que elimina la vista desde su antigua matriz de forma automática si lo añade a otro (puedo estar equivocado ;-).

Así es como tendría que hacer lo mismo en android:

ViewGroup parent = (ViewGroup) yourChildView.getParent();  

if (parent != null) { 
    // detach the child from parent or you get an exception if you try 
    // to add it to another one 
    parent.removeView(yourChildView); 
} 

// you might have to update the layout parameters on your child 
// for example if your child was attached to a RelativeLayout before 
// and you add it to a LinearLayout now 
// this seems very odd coming from iOS but iOS doesn't support layout 
// management, so... 
LinearLayout.LayoutParams params = new LinearLayout.LayoutP... 
yourChildView.setLayoutParams(params); 

yourNewParent.addView(yourChildView); 
+0

Gracias por la ayuda, ¡esto está trabajando para mí ahora! Parece demasiado fácil, pensé que había intentado esto. Creo que estaba enviando el elemento principal a mi tipo de diseño de RelativeLayout ... tal vez eso estaba causando mi problema. – Daniel

+1

¡Gran explicación para nosotros IOS confusos! ¡Gracias! – Fattie

7
((ViewGroup)view.getParent()).removeView(view); 
newContainer.addView(view) 
Cuestiones relacionadas