Android动画视图蒙版从上到下

时间:2016-08-05 09:32:50

标签: android animation view mask

我创建了自定义视图,它是FrameLayout的父级。 在我的视图中,我创建了蒙版:

data_new = subset(data, data[,2] %in% as.character(10:00:00) : as.character(11:00:00) )

并创建了Paint:

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);
}          

然后我覆盖了dispatchDraw:

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

要制作面具动画,我运行Handler:

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

它有效但很慢。

使用ValueAnimator的相同结果:

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

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

1 个答案:

答案 0 :(得分:0)

也许你可以使用循环显示。只需将动画的源点设置得非常远,并在非常大的半径到更大的半径之间设置它的动画,它有点笨拙,但它可能会导致几乎是直线的显示。