自动位图拉伸以适应 ImageView

Posted

技术标签:

【中文标题】自动位图拉伸以适应 ImageView【英文标题】:Automatic Bitmap stretch to fit ImageView 【发布时间】:2013-07-22 18:24:47 【问题描述】:

我有一个 80dp * 80dp 的位图。 ImageView 大小会自动缩放。 ImageView 大小为:130DP * 130DP(大于位图大小)。

我试图让位图适合 imageView 大小(我不介意丢失图像质量)。

这里有一些代码:

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

   <com.inturnex.safecam.SquareImageView 
       android:id="@+id/imageView" 
    android:layout_
    android:layout_
    android:src="@drawable/locked_image"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    />


</LinearLayout>

我正在以编程方式设置位图。 ImageView 大小为 130DP,但我看到的图像大小为 80DP(作为原始位图,它不会拉伸以适应 ImageView 大小)。

我可以做些什么来完成这项任务?谢谢!

编辑: SquareImageView 实现:

public class SquareImageView extends ImageView 
    public SquareImageView(Context context) 
        super(context);
    

    public SquareImageView(Context context, AttributeSet attrs) 
        super(context, attrs);
    

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) 
        super(context, attrs, defStyle);
    

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); //Snap to width
    

【问题讨论】:

@Stacks28 看代码,有FitXY的使用。哦,我没有以编程方式尝试。 以编程方式使用 imageview.setScaleType(ScaleType.FIT_XY); @Stacks28 还是一样的结果。 com.inturnex.safecam.SquareImageView 是一个什么样的对象?在转向自定义对象之前,我会尝试使用普通的旧 imageView... @Stacks28 你能提供一个图像缩略图的例子吗?它对我有什么帮助?我正在寻找最佳的内存解决方案。 【参考方案1】:

您可能会尝试使用缩放到 Matrix(以编程方式或在 xml 中)

imageView.setScaleType(ScaleType.MATRIX);
Matrix matrix = new Matrix();
matrix.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.FILL);
imageView.setBitmap(bitmap);

在这里,Dalvik 获取您的图像,应用缩放矩阵以填充您的 ImageView。你的 drawableRect 应该包含你的位图的尺寸,你的 viewRect,你的imageView 的尺寸。

【讨论】:

以上是关于自动位图拉伸以适应 ImageView的主要内容,如果未能解决你的问题,请参考以下文章

PySide2,如何拉伸 QTableWidget 以适应窗口宽度?

拉伸图像以适应

Flex 过渡:拉伸(或收缩)以适应内容

拉伸图像以适应 td

如何拉伸顶部导航以适应页面容器宽度

拉伸高度以适应本机反应中的内容