And*_*rea 71 size android dynamic imageview
我有一个带有ImageViews的GridView.我每行有3个.我可以使用WRAP_CONTENT和scaleType = CENTER_CROP正确设置宽度,但我不知道如何将ImageView的大小设置为正方形.这是我到目前为止所做的,除了高度,它似乎没问题,那就是"静态":
imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT, 300));
Run Code Online (Sandbox Code Playgroud)
我在适配器里面做的.
a.b*_*cci 165
最好的选择是ImageView
自己子类化,覆盖度量传递:
public class SquareImageView extends ImageView {
...
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
setMeasuredDimension(width, width);
}
...
}
Run Code Online (Sandbox Code Playgroud)
And*_*lva 97
另一个答案很好.这只是bertucci解决方案的一个扩展,它使得ImageView具有相对于xml膨胀布局的方形宽度和高度.
创建一个类,比如像这样扩展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);
int width = getMeasuredWidth();
setMeasuredDimension(width, width);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在你的xml中这样做,
<com.packagepath.tothis.SquareImageView
android:id="@+id/Imageview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)
如果你需要在程序中动态创建ImageView,而不是在xml中修复,那么这个实现将很有帮助.
mix*_*xel 26
更简单:
public class SquareImageView extends ImageView {
...
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
}
Run Code Online (Sandbox Code Playgroud)
Cha*_*ejo 11
以前的几个答案是完全足够的.我只是在这里为@Andro Selva和@ a.bertucci的解决方案添加一个小优化:
这是一个很小的优化,但检查宽度和高度是否不同可能会阻止另一次测量通过.
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, widthMeasureSpec);
int width = getMeasuredWidth();
int height = getMeasuredHeight();
// Optimization so we don't measure twice unless we need to
if (width != height) {
setMeasuredDimension(width, width);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48841 次 |
最近记录: |