自定义 ImageView 为正方形

Posted

技术标签:

【中文标题】自定义 ImageView 为正方形【英文标题】:Custom ImageView to be square 【发布时间】:2014-06-16 00:12:46 【问题描述】:

我试图将图像视图的高度和宽度设置为屏幕的宽度(方形)。图像视图位于列表视图中。我试图在我的 baseadapter 的 getview 方法中设置高度和宽度。发生的事情是滚动变得非常缓慢。所以我试图做的是通过扩展 ImageView 类来编写我自己的图像视图,这样它就会被绘制到正确的大小,所以我不需要在 getview 方法中更改它。这仍然没有改变任何东西。滚动仍然很慢。如何设置图像视图的宽度和高度以匹配屏幕宽度?

     public class ScaledImageView  extends ImageView

public ScaledImageView(Context context) 
    super(context);
    // TODO Auto-generated constructor stub


public ScaledImageView(Context context, AttributeSet attrs, int defStyle) 
    super(context, attrs, defStyle);
    // TODO Auto-generated constructor stub


public ScaledImageView(Context context, AttributeSet attrs) 
    super(context, attrs);
    // TODO Auto-generated constructor stub



      @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

   // int width = getMeasuredWidth();



    setMeasuredDimension(resolveSize(this.getMeasuredWidth(), widthMeasureSpec),      resolveSize(this.getMeasuredWidth(), widthMeasureSpec));


【问题讨论】:

您可以尝试使用 ImageView image.setScaleType(ScaleType.FIT_XY); 动态设置视图大小将其缩放到您的屏幕上。 【参考方案1】:
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec)

    final int width = getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec);
    if(width>this.squareWidth)
    
        this.squareWidth = width;
    
    setMeasuredDimension(this.squareWidth, this.squareWidth);

在here查看我的完整示例。

您还可以查看我的适配器,了解我是如何实现该性能的。我猜你可能还在 getView() 中实例化新视图。

如果它仍然很慢,我需要查看您的适配器(请同时提及您的图像的二进制大小)。另请参阅我的示例,即使将图像拉到电线上并重新裁剪/调整它们的大小,它也非常快。

【讨论】:

@frederick_c_siu- 它仍然很慢。

以上是关于自定义 ImageView 为正方形的主要内容,如果未能解决你的问题,请参考以下文章

自定义ImageView系列 - 区域截图(下)

Android:自定义底页对话框

图像未按 XML ImageView 中的定义显示

如何为形状添加自定义视图修改器

ImageView 显示本地和网上的图片(转)

如何以编程方式将 VectorDrawable 设置为 ImageView 的图像