Rotate animation after Translate doesn't work on Android

1.2k views Asked by At

I'm trying to implement an app with animations. I want to get this sequence:

1 - Moving a image horizontally

2 - Rotate the image 90º

3 - Move the image vertically

But in step 2, the image does not rotate on itself and moves to original position to rotate.

What is my mistake?

sequential.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:interpolator="@android:anim/linear_interpolator" >

<translate
    android:duration="1000"
    android:fillAfter="true"
    android:fromXDelta="0%p"
    android:startOffset="500"
    android:toXDelta="83%p" />

</set>

Main.java

RotateAnimation animRotar1;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imagenPacman = (ImageView) findViewById(R.id.imagen);
    fondoImagen = (RelativeLayout) findViewById(R.id.fondo_imagen);

    animRotar1 = new RotateAnimation(0, 90,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

    animPacman = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.sequential);
    animPacman.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {}

        @Override
        public void onAnimationRepeat(Animation animation) {}

        @Override
        public void onAnimationEnd(Animation animation) {

            rotar1();
        }
    });

    fondoImagen.startAnimation(animPacman);
}

private void rotar1() {

    animRotar1.setInterpolator(new LinearInterpolator());
    animRotar1.setDuration(1000);
    animRotar1.setFillEnabled(true);
    animRotar1.setFillAfter(true);

    fondoImagen.startAnimation(animRotar1);
}
1

There are 1 answers

3
balaji koduri On BEST ANSWER

like this:

here you have to caliculate the distance of the target position after translate animation,

EDIT:

float pivotX=(getResources().getDisplayMetrics().widthPixels/100)*83;

RotateAnimation animation2 = new RotateAnimation(0,90,Animation.RELATIVE_TO_PARENT,pivotX,Animation.RELATIVE_TO_PARENT,0);