William J. Francis revisa el tema de los interpoladores Android y muestra cómo puede divertirse aún más con estas clases.
Escribí un artículo en noviembre de 2013 sobre el uso del interpolador de rebote de Android. Desde entonces, he recibido varios correos electrónicos preguntando por los otros ocho interpoladores soportados por el SDK de Android. En lugar de ir de uno en uno, pensé que sería útil escribir una aplicación que permitiera a un usuario jugar con todos ellos.
Este rápido proyecto le permite comparar los diferentes interpoladores que ofrece Android de primera mano. Puede seguir, o descargar e importar todo el proyecto directamente a Eclipse.
1. Cree un nuevo proyecto Android en Eclipse. Objetivo SDK 14 (ICS) o superior.
2. En la carpeta /res/valores, codifique una matriz en el archivo string.xml.
strings.xml<?xml version="1.0" encoding="utf-8"?><Recursos> <cadena name="app_name">FunWithText</string> <cadena name="action_settings">Configuración</string> <cadena name="hello_world">Hello World</string> <string name="prompt">Pick One</string> <string-array name="interpolators"> <item>AccelerateDecelerateInterpolator</item> <item> <itemAcelerarInterpolator</item> <item>AnticipateInterpolator</item> <item>AnticipateOvershootInterpolator</item> <item>BounceInterpolator</item> <item>DecelerateInterpolator</item> <item>LinearInterpolator</item> <item>OvershootInterpolator</item> </string-array></resources>
3. Nuestro diseño consistirá en una Vista de Texto y un Girador. Busque el archivo /res/layout/activity_main.xml y realice las siguientes modificaciones.
activity_main.xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layouts_centerInParent="true" android:textSize="30sp" android:textStyle="bold":visibility="invisible" android:text="@string/hello_world" /> <Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:entries="@array/interpolators" android="prompt="@string/prompt" />></RelativeLayout>
4. Necesitaremos codificar nuestro archivo /src/MainAcitvity.java. Aquí estoy conectando un oyente OnItemSelected a nuestro widget spinner, y usando un poco de reflexión para crear el interpolador correcto. Sé que algunos puristas de Java se apresurarán a señalar que Class.forName(.newInstance() no es la forma recomendada de cargar una clase a través de la reflexión; sin embargo, es muy conveniente para el contexto de lo que estoy haciendo aquí, y de manera realista una aplicación de producción estaría eligiendo sólo una o tal vez unas pocas implementaciones concretas de interpoladores muy específicos.
MainActivity.javapackage com.authorwjf.funwithtext;import android.os.Bundle;import android.view.Display;import android.view.View;import.android.view.view.view;import.android.animation.Interpolator;import android.widget.import.android.widget.view.AdapterView;import android.adapter.widget.view.OnItemSelectedListener;import.android.widget.spinner;import.android.widget.widget.view.Text;import.android.app.Actividad;import.android.graphics.Point;public class MainActivity extiende Activity implementa OnItemSelectedListener { private static final long DELAY = 1000; private static final DURATION = 500; private static final String PACKAGE = "android.view.animation."; private TextView mTextView1; private float getScreenHeight() { Display display = getWindowManager(.getDefaultDisplay(); Point size = new Point(); display.getSize(size); return (float) size.floating) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView1 = (TextView) findViewById(R.id.text_view); ((Spinner)findViewById(R.id.spinner).setOnItemSelectedListener(this); } @Override public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) { String interpolatorName = (String) parent.getAdapter(.getItem(pos); mTextView1.setTranslationY(getScreenHeight()); mTextView1.setVisibility(View.VISIBLE); intente { Interpolator interpolator = (Interpolator) Class.forName(PACKAGE+interpolatorName.newInstance(); mTextView1.animate() .setInterpolator(interpolator) .setDuration(DURATION) .setStartDelay(DELAY) .translationYBy(-getScreenHeight()).start(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub }}} (Suprimir el vacío público enNadaSeleccionado)
¿Listo para ver algunas animaciones en acción? Ejecute la aplicación (preferiblemente en un dispositivo) y seleccione un interpolador en el menú desplegable. Cada vez que lo haga, el texto de «hola mundo» se perderá de vista y luego se animará de nuevo a la vista. Es posible que necesite disminuir la duración de la animación para tener una buena idea de las diferencias entre algunas de las animaciones más sutiles.
Te animo a que veas animaciones en toda tu aplicación cuando sea posible. Creo que las animaciones de visualización son muy útiles para señalar áreas táctiles en la pantalla, así como para suavizar el retardo cuando estoy realizando cálculos en segundo plano.