Animar la imagen .png en el widget
Descripción del problema
Estoy escribiendo una sencilla aplicación de Widget para Android, en mi Widget I Layout tengo el control ImageViewRefresh
en el que he ajustado Refrescar Imagen de Imagen (Imagen Verde Abajo).
Pregunta
En algún momento ImageViewRefresh
un botón ImageViewRefresh
en mi Widget y el inicio de la aplicación para descargar algún contenido de Internet, mientras que la aplicación de descarga de datos en un fondo Quiero hacer algunas animaciones, como rotar mi imagen (Green Image Below). Puedo hacer eso ?
- Sube un diseño con el teclado suave pero guarda uno en la parte inferior
- Android: problemas de setSelection () de la galería personalizada
- Android obtener la posición del elemento seleccionado en gridview
- Cómo agregar múltiples TextView dynamicall a la definición LinearLayout en main.xml
- Drop-menu en ListView para Android
Investigaciones
He leído algunos posts sobre la animación de imágenes, pero sólo puedo encontrar animación de imágenes .gif en la aplicación, es donde una forma de girar la imagen, por ejemplo, hacer algunas imágenes giradas y cambiarlos o algo más.
Ejemplo de código
Aquí está una parte del código de mi layout
mi imagen no está girando. Por qué ? (Mi imagen es simple imagen .png)
<ProgressBar android:id="@+id/progressBarRefresh" android:layout_width="36dp" android:indeterminateDrawable="@drawable/arrow_refresh" android:layout_height="36dp" android:layout_alignTop="@+id/imageViewArrowNext" android:layout_marginRight="70dp" android:layout_toLeftOf="@+id/textViewAutherName" android:indeterminate="true" />
Imagen que quiero girar.
- La barra de espacio de Android no funciona
- Agregar CheckBox a la fila de lista pierde mis eventos onItemClick?
- AppWidgetHost no actualiza widgets
- ¿Cómo agregar vistas dinámicamente a un RelativeLayout ya declarado en el diseño xml?
- Cambiar el color de texto de ListView
- Android - Cuando se inicia la misma actividad desde el widget con diferentes extras, ¿cómo evitar que aparezca la misma instancia después de regresar del botón HOME?
- GridLayout de la biblioteca de soporte no muestra 2 filas en Android 2, onChildVisibilityChanged Error
- Android Tabhost Problema - .setIndicator
Editar: Me disculparé de antemano, pero creo que mi respuesta podría haber engañado de la pregunta:
- Como se ha probado, el sistema no gira automáticamente el dibujable, pero hay estilos que puede cambiar para hacerlo (honestamente no recuerdo, ha sido hace 2 años en Eclair), pero puede tratar de encontrarlo.
- La respuesta a continuación funciona (como se probó), pero NO para drawables personalizados que no girarlos.
- Para una animación personalizada dibujable consulte aquí: Personalizada Drawable para ProgressBar / ProgressDialog
- Pero como se mencionó en uno de los comentarios, no se supone que los widgets de aplicaciones ejecuten animaciones ¿Hay alguna manera de animar en un widget de inicio?
Puesto original
No intentes animar el widget tú mismo
Utilice un ProgressBar
establecer que sea indeterminado y utilizar setIndeterminateDrawable(Drawable d);
Para establecer la imagen que desea girar. (O simplemente dejar el nativo que se ve muy bien también)
Editar: aquí es cómo se vería el código:
// in your widget update method: View v = LayoutInflater.from(context).inflate(R.layout.widget, null); ProgressBar pb = (ProgressBar) v.findViewById(R.id.progressBar1); pb.setIndeterminateDrawable(R.drawable.widget_processing);
Esto es lo que el XML para algo como esto se vería así:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/imageView1" android:text="Medium Text" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/imageView1" android:layout_alignLeft="@+id/textView1" android:text="Small Text" android:textAppearance="?android:attr/textAppearanceSmall" /> <ProgressBar android:id="@+id/progressBar1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:indeterminate="true" /> </RelativeLayout>
La mejor manera de animar una imagen en Android es utilizando el sistema AnimationDrawable. Para ello, necesita un xml similar al siguiente en una de sus carpetas dibujables.
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item android:drawable="@drawable/image1" android:duration="200" /> <item android:drawable="@drawable/image2" android:duration="200" /> <item android:drawable="@drawable/image3" android:duration="200" /> </animation-list>
Donde image1, image2 y image3 son diferentes rasgos en sus recursos, cada uno representando un estado diferente de su imagen.
Para crear las imágenes, simplemente puede abrir la imagen con Gimp o Photoshop, y girarla unos pocos grados y exportarla en una nueva imagen, y repetirla.
Como alternativa, puede utilizar el código siguiente para girar el ImageView. Primero cree una carpeta "anim" debajo de su carpeta res y agregue un archivo rotate.xml con el siguiente contenido:
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:interpolator="@android:anim/linear_interpolator" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:duration="1000" android:startOffset="0" />
A continuación, importar e iniciar la animación de la siguiente manera:
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation); rotation.setRepeatCount(Animation.INFINITE); imageView.startAnimation(rotation);
- Android: error al abrir el archivo de rastreo: ningún archivo o directorio de este tipo
- Android In-App Billing – queryInventoryAsync devuelve 0 resultado