0

我仍在处理一段代码,我想使用按钮顺时针和逆时针旋转图像,我尝试了以下代码:

case (R.id.clock):
            matrix.postRotate(90);
            matrix.postRotate(getDegreesFromRadians(angle), mid.x, mid.y);

        break;

        case (R.id.anticlock):
            float degrees = 0;
            degrees = degrees-10;
            matrix.postRotate(degrees); 
            break;

它正在工作但不是正确的方式,首先我必须按下按钮然后单击 imageview 来旋转图像。有什么帮助吗?

我在这里也问过这个问题Android Rotate image ontouch 但现在我想使用按钮

4

2 回答 2

2

这是我通常做的。我用这个方法创建了静态 Util 类:

public static Bitmap rotate(Bitmap bitmap, int degree) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();

    Matrix mtx = new Matrix();
    mtx.postRotate(degree);

  return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
}

然后,我像这样使用它:

case 21: // ROTATE LEFT
    ImageProcessActivity.processedBitmap = ImageUtil.rotate(ImageProcessActivity.processedBitmap, -90);
    d = new BitmapDrawable(ImageProcessActivity.processedBitmap);
    ImageProcessActivity.selectedImage.setImageDrawable(d);

break;
case 22: // ROTATE RIGHT
    ImageProcessActivity.processedBitmap = ImageUtil.rotate(ImageProcessActivity.processedBitmap, 90);
    d = new BitmapDrawable(ImageProcessActivity.processedBitmap);
    ImageProcessActivity.selectedImage.setImageDrawable(d);
break;

你看,在我的代码中,我将正在显示的图像与 ImageView 分开。这样,我可以轻松地操作图像而无需 ImageView 的麻烦。ImageView,顾名思义,仅用于查看图像。不是操纵的来源。

于 2012-06-13T23:13:13.820 回答
0

您必须通知您的视图已更改,以便 android 重新渲染它。视图不是 frameRate 渲染的,所以在更改矩阵后这样做:

yourView.invalidate();

应该管用

于 2012-06-13T23:14:38.700 回答