自定义 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 为正方形的主要内容,如果未能解决你的问题,请参考以下文章