android - 在android中使用seekBar旋转图像

标签 android

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

公共(public)类 MainActivity 扩展 Activity 实现 OnSeekBarChangeListener {

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 内旋转位图,效率更高。

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

关于android - 在android中使用seekBar旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32230587/

相关文章:

android - 如何将部分分隔符/分隔符添加到 ListView?

java - Gradle 同步失败 : Unsupported method: SyncIssue. getMultiLineMessage()。 (安卓工作室)

android - Android Studio 中的布局验证

android - 如何使用 New Build System 在项目中添加 AAR 库?

java - cordova 插件添加外部 .aar 文件(不是 .jar)

android - 位置由 GPS 设置,尽管 GPS 应该被禁用

java - 如何修复我的音频? (优先)

android - 使用 ESP8266 查找本地网络上的其他设备

android - 尽管我使用的是 LinearLayout,为什么我的 2 个自定义 View 布局彼此重叠

android - 既然我们有了 Honeycomb,那么什么是 RenderScript?