【问题标题】:Android animate view mask from top to bottomAndroid动画视图掩码从上到下
【发布时间】:2016-12-11 16:13:24
【问题描述】:

我创建了自定义视图,它是 FrameLayout 的父级。 在我看来,我已经创建了面具:

function makeBitmapMask(int animationHeight) {
    mask = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(),
    Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(mask);
    drawable.setBounds(0, animationHeight, getMeasuredWidth(), getMeasuredHeight());
    drawable.draw(canvas);
}          

并创建了画图:

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setXfermode(mPorterDuffXferMode);

然后我重写了 dispatchDraw:

@Override
protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);
        paint.setXfermode(mPorterDuffXferMode);
        canvas.drawBitmap(mask, 0.0f, 0.0f, mPaint);
        paint.setXfermode(null);
}

为了制作蒙版动画,我运行 Handler:

int animationHeight = 0;
private void animateView() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                animateView();
                animationHeight += 10;
                makeBitmapMask(animationHeight);
                invalidate();
            }
        }, 10);
    }

可以,但是很慢。

使用 ValueAnimator 的结果相同:

ValueAnimator va = ValueAnimator.ofInt(0, getHeight());
    int mDuration = 3000;
    va.setDuration(mDuration);
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        public void onAnimationUpdate(ValueAnimator animation) {
            Integer value = (Integer) animation.getAnimatedValue();
            makeBitmapMask(value);
            invalidate();
        }
    });

    va.start();

我认为,makeBitmapMask() 非常慢。 也许我只能更改蒙版边界或高度,而无需在每个动画帧上重新创建新的位图? 制作视图蒙版动画的正确方法是什么?

【问题讨论】:

  • 使用ValueAnimator / ObjectAnimator
  • 反正很慢。我认为, makeBitmapMask() 非常慢。也许我只能更改蒙版边界或高度,而无需在每个动画帧上重新创建新的位图?

标签: android animation view mask


【解决方案1】:

也许您可以使用循环显示。只需将动画的源点设置得很远,并在一个非常大的半径到稍大一点的半径之间进行动画处理,这有点笨拙,但它可以产生几乎直线的显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    相关资源
    最近更新 更多