I create a CustomView
extends View
. Create some CustomView
and using animation to move and rotate them. After change backgroundResource
and error happened, new background not fill all CustomView
. Please see code:
clearAnimation();
AnimationSet animation = new AnimationSet(true);
TranslateAnimation translateAnimation = new TranslateAnimation(0, destX - srcX, 0, destY - srcY);
translateAnimation.setInterpolator(new LinearInterpolator());
translateAnimation.setDuration((long) MGConstant.ANIMATE_DURATION);
animation.addAnimation(translateAnimation);
final float finalX = destX;
final float finalY = destY;
animation.setAnimationListener(new AnimationListener() {
public void onAnimationEnd(Animation arg0) {
clearAnimation();
setX(finalX);
setY(finalY);
RotateAnimation rotateAnimation = new RotateAnimation(0, degrees, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new LinearInterpolator());
rotateAnimation.setDuration((long) MGConstant.ANIMATE_DURATION);
rotateAnimation.setFillAfter(true);
startAnimation(rotateAnimation);
resetLayout();
mMoveStatus = false;
degree = degrees;
}
public void onAnimationRepeat(Animation arg0) {
}
public void onAnimationStart(Animation arg0) {
}
});
startAnimation(animation);
and resetLauyout:
lp = (LayoutParams) getLayoutParams();
if (lp == null) {
Log.d(TAG, "FIRST");
lp = new LayoutParams((int) cardW, (int) cardH);
lp.leftMargin = (int) mX;
lp.topMargin = (int) mY;
} else {
Log.d(TAG, "LAST");
lp.leftMargin = (int) mX;
lp.topMargin = (int) mY;
}
setLayoutParams(lp);
Please help me
When you change things like layout parameteres, make sure you also call View.requestLayout(). I don't think you need this here though. All you need is the following:
AnimationSet animation = new AnimationSet(true);
animation.setFillAfter(true);
TranslateAnimation translateAnimation = new TranslateAnimation(0, destX - srcX, 0, destY - srcY);
translateAnimation.setInterpolator(new LinearInterpolator());
translateAnimation.setDuration((long) MGConstant.ANIMATE_DURATION);
animation.addAnimation(translateAnimation);
RotateAnimation rotateAnimation = new RotateAnimation(0, degrees, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new LinearInterpolator());
rotateAnimation.setDuration((long) MGConstant.ANIMATE_DURATION);
rotateAnimation.setStartOffset((long) MGConstant.ANIMATE_DURATION);
animation.addAnimation(rotateAnimation);
startAnimation(animation);
use ObjectAnimator
for animate the views, with respect to your requirement, It maintain the view after animation end, you dont want to change the LayoutParams
etc.
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(customView,
"translation", 0, destX - srcX, 0, destY - srcY);
objectAnimator.setDuration((long) MGConstantANIMATE_DURATION);
ObjectAnimator rotation = ObjectAnimator.ofFloat(customView,
"rotation", 0, degree);
rotation .setDuration((long) MGConstantANIMATE_DURATION);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration((long) MGConstantANIMATE_DURATION);
animatorSet.play(objectAnimator).after(rotation);
customView.setBackgroundResource(R.drawable.your_image);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With