动画后如何保存图像?

时间:2015-07-30 19:21:12

标签: android imageview

此问题已根据进度进行了修改,以备将来使用

我在ImageView中有一张图片。它附近有一个旋转按钮。这就是它的作用:

imageView.animate().rotation(imageView.getRotation()+45);

然后我在更改后保存图像:

Bitmap bm = ((BitmapDrawable)imageView.getDrawable()).getBitmap();

但是当我在更改后提取图像时,旧图像显示(未旋转):

rotatedImageView.setImageBitmap(bm);

如何在动画后将新图像作为Bitmap获取?

修改

按照@Droid Chris的回答,这就是我得到的:

我将背景设置为黑色,以便您更好地理解。最终它将是透明的

在:

before

后:

after

观察:

@Droid克里斯的答案在我将图像旋转90的倍数时起作用。但例如45的倍数是有问题的......

我确实需要45岁但是

SOLUTION:

所以我使用了@Droid Chris的功能,但不知怎的,它是对我的图像进行下采样。所以我需要在xml中为android:scaleType="center"设置ImageView。这解决了下采样问题。

另外,为了保留过渡动画,我必须这样做:

imageView.animate().rotation(imageView.getRotation()+45);

每次旋转操作,以下只有一次我要保存它:

Bitmap oldBitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap().copy(((BitmapDrawable)imageView.getDrawable()).getBitmap().getConfig(), true);

Bitmap bitmapAfterRotation = getRotatedBitmap(oldBitmap,imageView.getRotation());

另外,在getRotatedBitmap()中,我写了mat.setRotate(angle);而不是mat.postRotate(angle);

现在它按预期工作。

1 个答案:

答案 0 :(得分:0)

将矩阵应用于图像,这样就可以考虑旋转的角度,同时获得宽度和高度:

((BitmapDrawable)mUserProfileImageView.getDrawable()).getBounds().height()
or
((BitmapDrawable)mUserProfileImageView.getDrawable()).getBounds().width()

private Bitmap getRotatedBitmap(Bitmap bm, int angle, int width, int height) {
    Matrix mat = new Matrix();
    mat.postRotate(angle);

    Bitmap newBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, mat, true);

    bm.recycle();

    return newBitmap;
}