Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewOverlay在Drawable的remove()期间设置动画_Android_Android Animation_Android Drawable - Fatal编程技术网

Android ViewOverlay在Drawable的remove()期间设置动画

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,我用它在屏幕上显示一个可绘制的图形。当我想在视图顶部添加或删除可绘制的覆盖时,我会执行以下操作:

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()
两次。。。