android canvas drawBitMap并在一定的时间间隔内切换图像

时间:2016-07-16 18:37:29

标签: android canvas android-animation surfaceview ondraw

使用 onDraw()方法中的 canvas.drawBitMap()方法绘制应用程序使用surfaceview和位图的相机活动(白色矩形)表面视图。 我使用以下代码来实现这一目标:

canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_left), x1, y1, null);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_right), x2, y1, null);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_left), x1, y2, null);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_right), x2, y2, null);

截图:

enter image description here

但是我希望通过在两个位图之间切换来获得动画效果,它应该如下所示:

enter image description here

我试图找出一些解决方案(即使在stackoverflow上),但发现只是冗长且昂贵。请提出一些清洁且成本较低的方法。

我正在使用画布在surfaceview内做这一切。

1 个答案:

答案 0 :(得分:0)

我是通过调用surfaceview的 onDraw()中的postInvalidateDelayed来完成的。

postInvalidateDelayed(500, left,top,right,bottom);

这就是它的工作原理, onDraw()方法每500毫秒调用一次该时间更改位图(红色表示白色,白色表示红色)。可以使用简单的标志在图像之间进行更改。

    if(rectBlink){
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_left_white), x1, y1, null);
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_right_white), x2, y1, null);
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_left_white), x1, y2, null);
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_right_white), x2, y2, null);
        }
        else{
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_left_red), x1, y1, null);
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_right_red), x2, y1, null);
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_left_red), x1, y2, null);
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_right_red), x2, y2, null);
        }

然后使用以下代码将标志状态形式true更改为false或false为true:

rectBlink=!rectBlink;

这一切都已完成。