将动画添加到drawLine和drawBitmap

时间:2019-07-17 11:08:12

标签: android animation canvas android-animation

我有一个扩展相对布局的自定义视图。在dispatchDraw方法中,我在for循环内绘制线和图像,因为我对多条线有不同的起点和终点。 我想知道最简单的方法,例如,以缓慢的方式从点a到点b绘制带有动画的线,该动画只能设置为我决定的线,而不能设置为所有其他线。 我也想用动画来绘制图像,但我不想移动图像,但是我想先将图像绘制得更大一点,然后将其缩小到合适的大小,或者从上到下绘制图像。同样,必须只为我决定的图像设置此动画,而不能为所有其他图像设置。

@Override
    protected void dispatchDraw(Canvas canvas) {
        int width = getWidth(); 
        int height = getHeight();
        super.dispatchDraw(canvas);
        size = width / (lines);
        insideMargin = size / margin;
        vMargin = (height - lines * size) / 2f; 
        canvas.translate(0,vMargin); 

        for(int x=0; x<lines;x++){
            for(int y=0;y<lines;y++){
                if(/*a condintion is true*/) {
                    //draw line with animation, how to do it?
                }else{
                    canvas.drawLine(x * size,
                            y * size,
                            (x + 1) * size,
                            y* size,
                            paint
                    );
                }

                if(/*a condition is true*/) {
                    //draw bitmap with animation, how to do it?
                }else
                    canvas.drawBitmap(image, src, dest, null);
            }


        }

    }

    //i have on touch event that will call invalidate

1 个答案:

答案 0 :(得分:0)

我认为您应该使用ValueAnimator来达到目的。据我了解,一旦发生触摸事件,您就希望对值进行动画处理。动画师返回的值必须用于所有对象,因此动画值应尽可能通用。我建议使用0到1作为浮点值。您可以将此值用于动画。对于位图动画,可以定义目标矩形的开始和结束大小,然后通过促进动画分数值来找到合适的大小。对于线性情况,可以将斜率用于动画。我认为您已经有了直线的起点和终点,因此可以使用斜率和分数来计算动画终点。