Reputation: 6877
How do I move an object in a path while rotating it around its own axis as in the following image:
While this is what I actually get:
Here's my code:
AnimationSet as1 = new AnimationSet(true);
as1.setFillAfter(true);
float dist = 0.5f;
// The following is too slow just to inspect the animation
int duration = 5000; // 5 seconds
// Tried the following: RELATIVE_TO_SELF and RELATIVE_TO_PARENT but no difference
int ttype = Animation.RELATIVE_TO_SELF; // Type of translation
// Move to X: distance , Y: distance
TranslateAnimation ta1 = new TranslateAnimation( ttype,0,ttype,dist,ttype,0, ttype,dist);
ta1.setDuration(duration);
// Add Translation to the set
as1.addAnimation(ta1);
// Rotate around its center
int rtype = Animation.RELATIVE_TO_SELF;
float rotation = 90;
RotateAnimation ra1 = new RotateAnimation(0, rotation,rtype,0.5f , rtype,0.5f );
ra1.setDuration(duration);
as1.addAnimation(ra1);
Object1.startAnimation(as1); // in my app Object1 is an ImageButton
Upvotes: 3
Views: 1188
Reputation: 683
Use below code to move object while rotating.
AnimationSet set = new AnimationSet(true); set.setFillAfter(true);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new AccelerateInterpolator());
rotateAnimation.setDuration(1000);
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, .85f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f);
translateAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
translateAnimation.setDuration(1000);
set.addAnimation(rotateAnimation);
set.addAnimation(translateAnimation);
btnRoll.startAnimation(set);
Upvotes: 0
Reputation: 6877
Well changing the order of Translate and Rotate Animations Fixed the problem.
Upvotes: 5