studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones android animation layout dynamic textview

móviles - manual de programacion android pdf



cambiar el fondo con animación cuando el usuario hace clic en él (1)

Usé un LinearLayout en mi actividad para cambiar dos vistas. Aquí, utilicé dos textviews. Cuando el usuario hace clic en el diseño lineal, cambio las vistas según mis requisitos. el archivo xml está aquí,

<LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@drawable/customswitchselector" android:textStyle="bold" android:layout_below="@+id/linearTab" android:layout_marginTop="20dp" android:layout_marginBottom="20dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:showText="true" android:id="@+id/switch1" android:checked="false" android:weightSum="2"> <TextView android:id="@+id/tv_switch1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_gravity="center_vertical" android:layout_weight="1" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="5dp" android:paddingBottom="5dp" android:textStyle="bold" android:textColor="#272351" style="bold" /> <TextView android:id="@+id/tv_switch_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" android:textStyle="bold" android:layout_gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="5dp" android:paddingBottom="5dp" android:textColor="#ffffff" style="bold" /> </LinearLayout>

Estas dos imágenes muestran mis dos condiciones. He hecho lo suficiente para cambiar esto. Ahora quiero hacer animación mientras estoy cambiando el fondo de las vistas de texto en los clics de diseño. He comprobado el ejemplo de transitiondrawable pero no me ayudó.

customswitchselector.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true"> <shape android:dither="true" android:shape="rectangle" android:useLevel="false" android:visible="true"> <gradient android:angle="270" android:endColor="#ffffff" android:startColor="#ffffff" /> <corners android:radius="30dp" /> </shape> </item> <item android:state_checked="false"> <shape android:dither="true" android:shape="rectangle" android:useLevel="false" android:visible="true"> <gradient android:angle="270" android:endColor="#ffffff" android:startColor="#ffffff" /> <corners android:radius="30dp" /> </shape> </item> </selector>

custom_track.xml Esto se usa para la vista textual con fondo azul

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:dither="true" android:shape="rectangle" android:useLevel="false" android:visible="true"> <gradient android:angle="270" android:endColor="#292850" android:startColor="#292850" /> <corners android:radius="30dp" /> <size android:width="100dp" android:height="30dp" /> </shape>


Una posibilidad sería establecer el FrameLayout blanco como fondo de un FrameLayout y agregar una View para el óvalo azul y dos TextViews para los títulos.

Para seguir logrando que las vistas ocupen exactamente la mitad del contenedor, puede usar PercenFrameLayout (lea más sobre esto en el documento oficial ). Para usarlo necesitas agregar esta dependencia a tu build.gradle : compile ''com.android.support:percent:25.2.0''

Después de crear el diseño, solo se anima la gravedad del óvalo azul de izquierda a derecha o al revés.

Entonces su diseño se vería así:

<PercentFrameLayout android:id="@+id/container" android:animateLayoutChanges="true" android:background="@drawable/white_oval" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- blue oval --> <View android:id="@+id/blue_oval" android:gravity="start" android:background="@drawable/blue_oval" app:layout_widthPercent="50%" android:layout_height="wrap_content" android:transformPivotX="0dp" /> <!--2 textviews--> <TextView app:layout_widthPercent="50%" android:layout_height="wrap_content" android:text="left" android:gravity="start"/> <TextView app:layout_widthPercent="50%" android:layout_height="wrap_content" android:text="right" android:gravity="end"/> </FrameLayout>

Luego en tu código anima el cambio de gravedad del óvalo azul como este:

private void animateGravity(int toGravity) { LayoutTransition layoutTransition = container.getLayoutTransition(); layoutTransition.enableTransitionType(LayoutTransition.CHANGING); layoutTransition.setDuration(YOUR_ANIMATION_DURATION); layoutTransition.setInterpolator(LayoutTransition.CHANGING, new AccelerateDecelerateInterpolator()); FrameLayout.LayoutParams layoutParams = (LayoutParams) blueOvalView.getLayoutParams(); layoutParams.gravity = toGravity; blueOvalView.setLayoutParams(layoutParams); }