Vista de imagen de Android Autoscroll

En mi actividad sólo tengo un ImageView. En él, el src es una imagen que es mucho más grande que la pantalla. Quiero que la imagen se desplace slooooowly de izquierda a derecha hasta que alcanza el margen derecho de la foto, a continuación, comenzar a desplazarse hacia atrás hacia la izquierda hasta el margen izquierdo alcanzado. Entonces empieza de nuevo. Necesito que suceda en un hilo separado por lo que el teléfono no se congele mientras esto sucede. Esto es lo que necesito

¿Cómo puedo conseguir esto? ¿Hay un widget que hace esto por defecto?

CÓDIGO ACTUALIZADO // diseño:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mylinear" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:src="@drawable/rainforest" /> </RelativeLayout> 

// y Actividad

 public class MainActivity extends Activity { Animation _translateAnimation; RelativeLayout _relativeLoading = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); _translateAnimation = new TranslateAnimation(TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, -100f, TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 0f); _translateAnimation.setDuration(5000); _translateAnimation.setRepeatCount(-1); _translateAnimation.setRepeatMode(Animation.REVERSE); // REVERSE _translateAnimation.setInterpolator(new LinearInterpolator()); _relativeLoading = (RelativeLayout) findViewById(R.id.mylinear); _relativeLoading.startAnimation(_translateAnimation); } 

Pero se va de la imagen. Quiero decir, el rollo va de izquierda a derecha, "empujando" la imagen a la izquierda y mostrando el fondo blanco debajo del ImageView.

  • Además, ¿debería estar dentro de un hilo o algo así? Necesito poder salir de esta actividad de "desplazamiento" de alguna manera, sin usar el botón Atrás. Quiero un botón en la parte superior de la ImageView (el botón debe quedarse quieto) y onClick debe iniciar otro Intent

  • Parece que la imagen dentro de ImageView está recortada para encajar dentro de la pantalla. ¿Cómo puedo superar esto?

Ejemplo:

 private Animation _translateAnimation; private ImageView _image; _image = (ImageView)findViewById(R.id.yourimage); _translateAnimation = new TranslateAnimation(TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 100f, TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 0f); _translateAnimation.setDuration(10000); _translateAnimation.setRepeatCount(-1); _translateAnimation.setRepeatMode(Animation.REVERSE); _translateAnimation.setInterpolator(new LinearInterpolator()); _image.setAnimation(_translateAnimation); 

Esto hará que _linearLoading traducir lentamente a la derecha ya la izquierda y derecha e izquierda …

Más duración = más lentamente

TranslateAnimation.ABSOLUTE = Trabaja con la posición de la imagen TranslateAnimation.RELATIVE_TO_PARENT = Trabaja con el diseño de los padres …

El método TranslateAnimation (start x, end x, start y, end y)

Jugar con eso

Por lo tanto, la solución a mi problema está aquí (para todos los nuevos desarrolladores de Android, como yo, que podría necesitar esto para sus aplicaciones):

 public class MainActivity extends Activity { Animation _translateAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); _translateAnimation = new TranslateAnimation(TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, -300f, TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 0f); _translateAnimation.setDuration(8000); _translateAnimation.setRepeatCount(-1); _translateAnimation.setRepeatMode(Animation.REVERSE); // REVERSE _translateAnimation.setInterpolator(new LinearInterpolator()); ImageView img = (ImageView) findViewById(R.id.img); img.startAnimation(_translateAnimation); } } 

Y el diseño:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/global_relative" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/img" android:layout_width="600dp" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@drawable/rainforest" android:scaleType="center" android:src="@drawable/rainforest613x490" > </ImageView> </ScrollView> </RelativeLayout> 

Sólo asegúrese de que su imagen es lo suficientemente grande / alto como para ajustar la pantalla, y es (+ 300dp) más ancho que el ancho de la pantalla (o ajustar el código anterior).

Codificación feliz;)

Lo que podría hacer es añadir ImageView dentro de ScrollView. Me gusta esto

 <ScrollView android:id="@+id/img_scroll" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/IMAGENAME" /> </ScrollView> 

Como desea desplazar la imagen automáticamente, puede crear un método AsyncTask y dentro del método doInBackground (), crear un new Runnable o runOnUiThread() y enviar comandos al ScrollView utilizando su ID para desplazarse a medida que lo necesite.

  • Relleno de ScrollView
  • Cuando es necesario ejecutar invalidate () en una vista?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.