ImageView展开动画

时间:2017-08-24 16:45:36

标签: java android xml animation canvas

我基本上有一个用Canvas修改过的ImageView,看起来像个cirlce。 (原始图像的尺寸为正方形(500x500))

想象起始位置的样子:

http://imgur.com/bvXdLoP (红色是透明的,并借助Canvas方法删除)

动画应该花费1000毫秒,并在此时间步骤中恢复原始图像。所以最后应该有一个平方。

换句话说,截止角是方形和圆形(以及图像中标记的红色)之间的差异,在大约1000毫秒内恢复步骤,带有一种展开的动画。

不知道如何实现这一点,所以我可以分享我用来切断角落的Canvas方法(如果有帮助:X):

private Bitmap createCircleImage(Bitmap bitmap) {
        Bitmap bmp;

        bmp = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        BitmapShader shader = new BitmapShader(bitmap,
                BitmapShader.TileMode.CLAMP,
                BitmapShader.TileMode.CLAMP);

        float radius = bitmap.getWidth() / 2f;
        Canvas canvas = new Canvas(bmp);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setShader(shader);

        canvas.drawCircle(bitmap.getWidth()/2,bitmap.getHeight()/2,bitmap.getHeight()/2, paint);

        return bmp;
    }

感谢任何帮助, 谢谢!

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现这种行为。例如,您可以创建自定义视图并覆盖其onDraw方法,例如

@Override
public void onDraw(Canvas canvas) {
  canvas.drawCircle(viewWidth/2, viewHeight/2, currentRadius, paint);

}

然后你可以一点一点地增加半径并使视图无效。因为默认情况下视图会在其clipBounds上剪辑(除非你另外设置,否则你只能绘制内部视图宽度x viewheight矩形)你会得到效果你要的那个。然后你可以调整插值来实现更流畅和更自然的动画。

注意:位图着色器附加到绘图上(您已经知道要创建它的chow)。我没有在代码中包含它,因为出于性能原因你不应该在onDraw方法中初始化它。