【问题标题】:Android ViewOverlay animate during remove() of Drawable在 Drawable 的 remove() 期间 Android ViewOverlay 动画
【发布时间】:2015-12-10 22:59:18
【问题描述】:

我有一个 ViewOverlay,用于在屏幕上显示 Drawable。当我想在视图顶部添加或删除可绘制的叠加层时,我会执行以下操作:

ViewOverlay overlay = mView.getOverlay();
overlay.add(mDrawable);

...以后的某个时候...

ViewOverlay overlay = mView.getOverlay();
overlay.remove(mDrawable);

但是,这会立即从屏幕上删除我的可绘制对象。有没有办法让覆盖层中的可绘制对象消失,而不是立即删除它?

【问题讨论】:

  • 为drawable本身设置动画。动画完成后,致电overlay.remove(drawable)

标签: android android-animation android-drawable


【解决方案1】:

您必须首先将动画直接应用到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();

【讨论】:

  • 您可以通过使用AnimatorListenerAdapter 而不是Animator.AnimatorListener 来缩短您的代码。您可以选择性地覆盖 AnimatorListenerAdapter 中的回调,因此不必声明所有不需要的回调。
  • 另外,您不必在onAnimationCancel()onAnimationEnd() 中都调用remove()onAnimationEnd() 将始终在动画结束时调用。如果动画被取消,它将首先调用onAnimationCancel(),然后直接调用onAnimationEnd(),因此在您的原始实现中,当发生这种情况时,您将调用remove() 两次......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多