programas principiantes para objetos mismo hacer faciles caricaturas app aplicacion animar animaciones animacion android android-animation

principiantes - Cómo animar una vista con Traducir animación en Android



programas para hacer animaciones 2d (1)

Tengo una ImageView en mi aplicación que puede ubicarse en cualquier lugar de la pantalla

Al tocar, quiero mover esta vista al centro de la pantalla. Probé esta funcionalidad con Translate Animation y su funcionalidad RELATIVE_TO_PARENT de la siguiente manera

TranslateAnimation translateAnimation1 = new TranslateAnimation( TranslateAnimation.RELATIVE_TO_PARENT,0.0f, TranslateAnimation.RELATIVE_TO_PARENT,0.5f, TranslateAnimation.RELATIVE_TO_PARENT,0.0f, TranslateAnimation.RELATIVE_TO_PARENT,0.5f);

pero ImageView se mueve 50% (de la pantalla) hacia abajo desde su posición actual.

¿Hay alguna forma de mover esta vista al centro de la pantalla, independientemente de su posición actual?


Para mover una Vista a cualquier parte de la pantalla, le recomendaría colocarla en un diseño de pantalla completa. Al hacerlo, no tendrá que preocuparse por los recortes o las coordenadas relativas.

Puedes probar este código de muestra:

main.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/rootLayout"> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="MOVE" android:layout_centerHorizontal="true"/> <ImageView android:id="@+id/img1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:layout_marginLeft="10dip"/> <ImageView android:id="@+id/img2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:layout_centerVertical="true" android:layout_alignParentRight="true"/> <ImageView android:id="@+id/img3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:layout_marginLeft="60dip" android:layout_alignParentBottom="true" android:layout_marginBottom="100dip"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:clipChildren="false" android:clipToPadding="false"> <ImageView android:id="@+id/img4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:layout_marginLeft="60dip" android:layout_marginTop="150dip"/> </LinearLayout> </RelativeLayout>

Tu actividad

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ((Button) findViewById( R.id.btn1 )).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { ImageView img = (ImageView) findViewById( R.id.img1 ); moveViewToScreenCenter( img ); img = (ImageView) findViewById( R.id.img2 ); moveViewToScreenCenter( img ); img = (ImageView) findViewById( R.id.img3 ); moveViewToScreenCenter( img ); img = (ImageView) findViewById( R.id.img4 ); moveViewToScreenCenter( img ); } }); } private void moveViewToScreenCenter( View view ) { RelativeLayout root = (RelativeLayout) findViewById( R.id.rootLayout ); DisplayMetrics dm = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics( dm ); int statusBarOffset = dm.heightPixels - root.getMeasuredHeight(); int originalPos[] = new int[2]; view.getLocationOnScreen( originalPos ); int xDest = dm.widthPixels/2; xDest -= (view.getMeasuredWidth()/2); int yDest = dm.heightPixels/2 - (view.getMeasuredHeight()/2) - statusBarOffset; TranslateAnimation anim = new TranslateAnimation( 0, xDest - originalPos[0] , 0, yDest - originalPos[1] ); anim.setDuration(1000); anim.setFillAfter( true ); view.startAnimation(anim); }

El método moveViewToScreenCenter obtiene las coordenadas absolutas de la vista y calcula la distancia que debe recorrer desde su posición actual para llegar al centro de la pantalla. La variable statusBarOffset mide la altura de la barra de estado.

Espero que puedas seguir con este ejemplo. Recuerde que después de la animación, la posición de su vista sigue siendo la inicial. Si toca el botón MOVE una y otra vez, se repetirá el mismo movimiento. Si desea cambiar la posición de su vista, hágalo una vez que la animación haya finalizado.