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をクリックして画像を回転させます。何か助けはありますか?

ここでも質問しましたAndroidRotateimage 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 に答える