如何在Android中创建可调整大小的ImageView

时间:2013-07-31 13:33:44

标签: android bitmap image-resizing

我希望我的应用的用户能够在运行时修改图像。用户应该能够通过点击图像视图的角落并拖动它来修改图像的高度和宽度,如下图所示:

enter image description here

我花了很多时间研究这个,我发现Making Sense of Multitouch Resize a large bitmap file to scaled output file类似于Pinch Zoom,但这些都不符合我的要求。

目前我正在使用下面的结果调整位图的大小,并在搜索栏的onprogress更改方法而不是帧中更改宽度。通过使用此功能,更改图像大小不能正常工作。

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){

    try {
        //Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);

        //The new size we want to scale to
        final int REQUIRED_WIDTH=WIDTH;
        final int REQUIRED_HIGHT=HIGHT;

        //Find the correct scale value. It should be the power of 2.
        int scale=1;
        while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
            scale*=2;

        //Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    }
        catch (FileNotFoundException e) {}
    return null;

}

更新:

现在使用画布中的绘图位图,使用this问题的接受答案顺利进行。

现在扩孔部分是将图像周围的框架设置为裁剪框架。

请帮助我实现这一目标。

2 个答案:

答案 0 :(得分:1)

“你做错了”。

不是每次都创建新的Bitmap,而是有几个选项:

  1. 调整ImageView本身的大小。
  2. 使用View创建您自己的Canvas并绘制位图。这样您就可以根据需要延长Btimap
  3. 如果您使用Canvas,那么要显示这些“裁剪点”,您也可以在画布上绘制它们。尽管如此,为了实现理想的行为和外观,您可能还需要覆盖这些方法:

    1. onTouchEvent - 处理您的调整大小行为,当用户触摸裁剪点时。
    2. onMeasure - 略微增加View的尺寸,因为您的“裁剪点”略微出现在图像中。

答案 1 :(得分:1)

您可以使用此library使用cropimageview3完成此操作并将您的图像设置为float drawable并完成