问题描述
public void startTween(final ImageView v, final boolean clicked){ RotateAnimation rotateAnimation = new RotateAnimation(0, 45, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f); rotateAnimation.setDuration(1000); rotateAnimation.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) { if (clicked){Log.e('test','ic_small');v.setImageResource(R.drawable.ic_close_small); }else {Log.e('test','ic_add');v.setImageResource(R.drawable.ic_add); } Log.e('test','onAnimationEnd');}@Overridepublic void onAnimationRepeat(Animation animation) {} }); rotateAnimation.setFillAfter(true); v.setAnimation(rotateAnimation); rotateAnimation.start();}这是在 Recyclerview的Item里,v是动画的目标对象,是一个Imageview,现在的问题是`setFillAfter(true);`与结束监听里的`v.setImageResource(R.drawable.ic_add);`会出问题,直接回到第一帧,而不是停留在最后一帧,如果把结束监听里的`v.setImageResource(R.drawable.ic_add);`去掉,那么就会停留在最后一帧,我的目的是让其停留在最后一帧,然后用一个与最后一帧一样的图片代替目前的图片资源.ps:Item里的动画用tween还是属性动画好?谢谢
问题解答
回答1:要保持view结束的状态,必须改view的属性,而不是改变动画的属性(动画并不会帮助你改变View的属性) rotateAnimation.setFillAfter(true);rotateAnimation.setFillBefore(false);你试一试有没有用