【问题标题】:How to create resizable ImageView in Android如何在 Android 中创建可调整大小的 ImageView
【发布时间】:2013-12-31 19:24:34
【问题描述】:

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

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

目前我正在使用下面的函数调整位图的大小,并在 seekbar 的 onprogress 更改方法中更改宽度而不是 frame。使用此功能更改图像大小并不顺利。

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问题的公认答案在画布中使用绘图位图顺利工作。

现在铰孔部分正在将图像周围的框架设置为类似于裁剪框架的东西。

请帮助我实现这一目标。

【问题讨论】:

  • 嗨,我看过教程,但我想问你:位于图像两侧的点是否只允许 X 轴或 Y 轴移动?如果是这样,那么您不能在代码部分中将 // Calculate the distance moved 简单地调整 X 和/或 Y 轴上的图像大小并将其更新为 ImageView 吗?
  • no point is not located.此帧应在重新缩放后根据图像大小出现。所以这个框架应该每次都在图像周围动态生成。我改变了我的问题图像。请检查这个新图像。谢谢...
  • 我猜有积分的部分已经完成了?你有没有为此做过什么?
  • 框架现在没有实现。首先,我尝试只考虑宽度。我放了搜索栏而不是框架来增加和减少宽度。我已经使用 decodeFile 函数来重新调整位图的大小并将其设置为 imagview。但位图变化如此缓慢,因此无法顺利运行。我可以像捏缩放那样获得平滑度吗?
  • 您的问题到底是什么?你试过写点什么吗?

标签: android bitmap image-resizing


【解决方案1】:

您可以使用此library 使用cropimageview3 并将您的图像设置为浮动可绘制,然后您就完成了

【讨论】:

    【解决方案2】:

    “你做错了”。

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

    1. 调整ImageView 本身的大小。
    2. 创建您自己的View 并使用Canvas 绘制位图。这将使您可以随意拉伸Btimap

    如果您选择Canvas,那么要显示这些“裁剪点”,您也可以在画布上绘制它们。不过,要实现所需的行为和外观,您可能还需要重写这些方法:

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

    【讨论】:

    • 谢谢我得到了我想要的平滑度。我现在正在使用画布..以及关于我们裁剪图像的框架的任何建议。
    • @SanketKachhela 我知道这是很久以前的事了,但你能分享你的代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2022-07-13
    • 2013-06-27
    • 2015-10-14
    相关资源
    最近更新 更多