android - 我希望我的代码在将图像保存到 android 之前使用搜索栏调整图像大小。我怎样才能做到这一点?

标签 android

我想在捕获图像之后但在保存之前为图像指定大小。我想要搜索栏为图像指定大小,然后将图像压缩到该大小。因为我是 android 的新手所以请帮助!

我的代码是:

public class ImageActivity extends AppCompatActivity {

private static final int CAMERA_REQUEST = 1888;

private ImageView imageview;
SeekBar sb;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image);

    sb=(SeekBar)findViewById(R.id.seekbar1);
    sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
        int progressChangedValue=0;

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                                      boolean fromUser)
        {
            progressChangedValue = progress;
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar)
        {
            Toast.makeText(ImageActivity.this, "progress starts",
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar)
        {
            Toast.makeText(ImageActivity.this, "Seek bar progress is :" + progressChangedValue,
                    Toast.LENGTH_SHORT).show();
        }

    });

    this.imageview = (ImageView) this.findViewById(R.id.imageview1);
    Button photoButton = (Button) this.findViewById(R.id.button1);

    photoButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);

        }
    });
}
protected void onActivityResult(int requestcode, int resultcode, Intent data) {
    if (requestcode == CAMERA_REQUEST && resultcode == RESULT_OK) {

        Bitmap photo = (Bitmap) data.getExtras().get("data");
        imageview.setImageBitmap(photo);
        UUID uuid = UUID.randomUUID();
        String randomUUIDString = uuid.toString();

        Toast.makeText(getApplicationContext(),"UUID is"+randomUUIDString,Toast.LENGTH_LONG).show();

    }
}

最佳答案

您必须设置最大进度:

seekBar.setMax(200);
// or with the imageview's size: 'seekBar.setMax(imageview.getWidth());'
// if 'getWidth()' returns 0, you need to get it in a thread (with 'post()')

现在,您可以初始化进度(例如,如果您不想开销 200):

seekBar.setProgress(seekBar.getMax());

然后,通过监听器中的 onProgressChange 状态,您可以设置新的宽度/高度。
假设您有一张宽度和高度相等、最大值为 200 的图像,您必须执行以下操作:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        imageview.getLayoutParams().width = progress;
        imageview.getLayoutParams().height = progress;
        imageview.requestLayout();
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) { }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) { }
});

就是这样!现在,您必须将更改后的尺寸保存在 Bitmap 上,您应该使用 ImageView 值创建一个新的 Bitmap,如下所示:

Bitmap finalBitmap = Bitmap.createScaledBitmap(bitmap,
                    imageview.getWidth(), imageview.getHeight(), false);

这不是最终的解决方案,它需要更多的测试和调整,但它是帮助您获得所需内容的有效线索。

关于android - 我希望我的代码在将图像保存到 android 之前使用搜索栏调整图像大小。我怎样才能做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38520188/

相关文章:

android - 为android studio 0.8设置本地文档

android - ActionBarActivity - NoClassDefFoundError 异常

java - SimpleDateFormat 用当前日期解析时间字符串

android - 如何使用 MediaPlayer 在 ListView 中播放多个视频?

Android SQL 数据库 - 未找到 rawQuery() 源

android - onScrollChanged() 从未在 Android 4.0 上触发

android - BottomNavigationView 与内容重叠-android

java - min3D 框架。物体旋转和移动

android - 如何将对象类型标签设置为 ListView ?

Android - 如何向 ListView 添加虚拟项目