Android ViewOverlay在Drawable的remove()期间设置动画
我有一个ViewOverlay,我用它在屏幕上显示一个可绘制的图形。当我想在视图顶部添加或删除可绘制的覆盖时,我会执行以下操作:Android ViewOverlay在Drawable的remove()期间设置动画,android,android-animation,android-drawable,Android,Android Animation,Android Drawable,我有一个ViewOverlay,我用它在屏幕上显示一个可绘制的图形。当我想在视图顶部添加或删除可绘制的覆盖时,我会执行以下操作: ViewOverlay overlay = mView.getOverlay(); overlay.add(mDrawable); …以后某个时候 ViewOverlay overlay = mView.getOverlay(); overlay.remove(mDrawable); 但是,这会立即从屏幕上删除我的drawable。有没有办法在覆盖层中淡出可绘制图
ViewOverlay overlay = mView.getOverlay();
overlay.add(mDrawable);
…以后某个时候
ViewOverlay overlay = mView.getOverlay();
overlay.remove(mDrawable);
但是,这会立即从屏幕上删除我的drawable。有没有办法在覆盖层中淡出可绘制图像,而不是立即将其删除?您必须首先将动画直接应用于可绘制图像,动画完成后,您可以调用
remove()
来删除覆盖层
ValueAnimator animator = ValueAnimator.ofInt(255, 0);
animator.setInterpolator(new LinearInterpolator());
animator.setDuration(ANIMATION_DURATION);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int alpha = (int) animation.getAnimatedValue();
mDrawable.setAlpha(alpha);
mViewThatHasOverlay.invalidate();
}
});
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
ViewOverlay overlay = mViewThatHasOverlay.getOverlay();
overlay.remove(mDrawable);
}
});
animator.start();
为可绘制对象本身设置动画。动画运行完毕后,调用
overlay.remove(drawable)
。您可以使用AnimatorListenerAdapter
而不是Animator.AnimatorListener
来缩短代码。您可以在AnimatorListenerAdapter
中有选择地覆盖回调,因此不必声明所有不需要的回调。此外,您不必在onAnimationCancel()
和onAnimationEnd()
中同时放置remove()
调用<动画结束时,将始终调用code>onAnimationEnd()。如果动画被取消,它将首先调用onAnimationCancel()
,然后直接调用onAnimationEnd()
,因此在原始实现中,当发生这种情况时,您将调用remove()
两次。。。