una pelota movimientos mover imagenes imagen hilos con animación java android android-animation

pelota - mover una imagen en java animación



Android mueve el fondo continuamente con animación (2)

¿Por qué no intenta animar el fondo usted mismo en lugar de usar un ViewSwitcher ? Todo lo que necesitas es un simple ValueAnimator :

Primero agregue dos ImageViews idénticas a su diseño y establezca la misma imagen de fondo para ambos:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/background_one" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/background"/> <ImageView android:id="@+id/background_two" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/background"/> </FrameLayout>

Luego use un ValueAnimator para animar su propiedad de traducción ValueAnimator , pero compensarlos por su ancho:

final ImageView backgroundOne = (ImageView) findViewById(R.id.background_one); final ImageView backgroundTwo = (ImageView) findViewById(R.id.background_two); final ValueAnimator animator = ValueAnimator.ofFloat(0.0f, 1.0f); animator.setRepeatCount(ValueAnimator.INFINITE); animator.setInterpolator(new LinearInterpolator()); animator.setDuration(10000L); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { final float progress = (float) animation.getAnimatedValue(); final float width = backgroundOne.getWidth(); final float translationX = width * progress; backgroundOne.setTranslationX(translationX); backgroundTwo.setTranslationX(translationX - width); } }); animator.start();

Esto da como resultado una animación continua que repite el fondo de forma indefinida y debería verse así:

Lo que quiero hacer es mover el fondo horizontalmente y repetirlo infinitamente.

Intenté usar un ImageSwitcher con animación para dar este efecto, pero no pude hacerlo funcionar bien. Este es el código que tengo hasta ahora.

public class MainActivity extends AppCompatActivity implements ViewSwitcher.ViewFactory { private Animation animSlide; private ImageSwitcher image; private ImageView imagePop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); image = (ImageSwitcher) findViewById(R.id.image_switcher); image.setFactory(this); image.setImageResource(R.drawable.zc06); Animation in = AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left); in.setDuration(10000); Animation out = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right); out.setDuration(10000); image.setInAnimation(in); image.setOutAnimation(out); Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { image.setImageResource(R.drawable.zc06); } }); } }, 0, 10000); Animation mZoomInAnimation = AnimationUtils.loadAnimation(this, R.anim.zoom_in); Animation mZoomOutAnimation = AnimationUtils.loadAnimation(this, R.anim.zoom_out); imagePop.startAnimation(mZoomInAnimation); imagePop.startAnimation(mZoomOutAnimation); } @Override public View makeView() { ImageView myView = new ImageView(getApplicationContext()); return myView; } }


Puedes usar AndroidScrollingImageView Library, todo lo que tienes que hacer es definir la velocidad y la fuente dibujable.

<com.q42.android.scrollingimageview.ScrollingImageView android:id="@+id/scrolling_background" android:layout_width="match_parent" android:layout_height="wrap_content" scrolling_image_view:speed="1dp" scrolling_image_view:src="@drawable/scrolling_background" />

EDITAR:

como mencionó @Cliff Burton, puede rotar la vista 90 grados si desea desplazarse verticalmente.