在android中使用seekBar旋转图像

在android中使用seekBar旋转图像,android,Android,我有下面的代码来旋转图像,但当我拖动seekBar时,它会在旧图像上创建一个新位图(它应该旋转旧图像而不是创建新图像),有人能帮我整理一下吗。? 我访问了我以前的问题,但没有人帮我解决这个问题 公共类MainActivity扩展了活动在SeekbarChangeListener上的实现{ ImageView iv_image; SeekBar seekbar; Bitmap source; float angle = 0; Button buttonClick; Bitmap rotatedIm

我有下面的代码来旋转图像,但当我拖动seekBar时,它会在旧图像上创建一个新位图(它应该旋转旧图像而不是创建新图像),有人能帮我整理一下吗。? 我访问了我以前的问题,但没有人帮我解决这个问题

公共类MainActivity扩展了活动在SeekbarChangeListener上的实现{

ImageView iv_image;
SeekBar seekbar;
Bitmap source;
float angle = 0;
Button buttonClick;
Bitmap rotatedImage;
static Matrix matrix;
Matrix m1 ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    buttonClick = (Button) findViewById(R.id.bt);
    buttonClick.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            angle += 90;

            iv_image.buildDrawingCache();
            source = iv_image.getDrawingCache();
            rotatedImage = rotateImage(source, angle);
            iv_image.setImageBitmap(rotatedImage);
        }
    });
}

void init() {
    iv_image = (ImageView) findViewById(R.id.iv_image);
    seekbar = (SeekBar) findViewById(R.id.seekbar);
    seekbar.setOnSeekBarChangeListener(this);
   // seekbar.setOnSeekBarChangeListener((OnSeekBarChangeListener) this);

}

public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) {
    // TODO Auto-generated method stub

    angle = progress;
    iv_image.buildDrawingCache();
    source = iv_image.getDrawingCache();
    rotatedImage = rotateImage(source, angle);
    iv_image.setImageMatrix(null);
    iv_image.setImageBitmap(rotatedImage);
}

public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub

}

public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub

}

public static Bitmap rotateImage(Bitmap sourceImage, float angle) {
    matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(sourceImage, 0, 0, sourceImage.getWidth(),
            sourceImage.getHeight(), matrix, true);

}
请尝试以下方法:

public static void rotateImage(float angle) {
    matrix = new Matrix();
    matrix.postRotate(angle);
    imageView.setImageMatrix(matrix);
    imageView.invalidate();
}
以下是您的接口实现:

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    angle = progress;
    rotateImage(angle);
}
通过这种方式,您可以在ImageView中旋转位图,这样效率更高


您甚至可以通过将矩阵对象设为私有成员并调用imageView.invalidate()来重用它旋转后,以优化代码。

我不认为您发布了代码…=p当您可以使用新的旋转角度更新图像矩阵时,您为什么要替换整个位图?这样效率会更高!请提供一些代码这不是旋转图像可能您必须调用imageView.invalidate();使其有效。我已更新了示例。您能否详细说明此答案如何解决问题,以及它如何改进现有答案?您应该设置imageview比例类型Matrix imageview.setScaleType(imageview.ScaleType.Matrix);
public static void rotateImage(float angle) {
    matrix = new Matrix();
    matrix.postRotate(angle);
    imageView.setScaleType(ImageView.ScaleType.MATRIX);
    imageView.setImageMatrix(matrix);
    imageView.invalidate();
}