gpt4 book ai didi

android - 如何动态改变ImageView的高度

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:27:12 24 4
gpt4 key购买 nike

我有一个用于 ListView 单元格的简单线性布局,它有一个 ImageView 。图像将从互联网上下载,因此尺寸可以不同。

但是,我想设置imageview的宽度为fill_parent,固定,运行时动态改变图片高度。图片高度设置规则:如果图像的 h/w 比率大于 1,则将 ImageView 设为正方形,表示高度与宽度匹配。

如果图像的高宽比小于 1,则按比例调整大小。预期两个样本如下。

第一个是 h/w<1,而第二个 'Cat' 是 h/w>1。

enter image description here enter image description here谢谢你的时间。

    <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical"
android:padding="10dp" >

<TextView
android:id="@+id/postTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold" />

<ImageView
android:id="@+id/postImg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:scaleType="centerCrop"
android:src="@drawable/dummy_image"
android:contentDescription="@string/postImage" />
</LinearLayout>

最佳答案

你需要继承ImageView

重写 onMeasure,我还没有测试过这个,但是你需要的所有变量都在那里,而且这个想法是正确的。您只需执行将图像的纵横比应用于 ImageView 高度,如果它大于宽度,则将其设置为宽度。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
Drawable drawable = getDrawable();
if (drawable != null)
{
//get imageview width
int width = MeasureSpec.getSize(widthMeasureSpec);


int diw = drawable.getIntrinsicWidth();
int dih = drawable.getIntrinsicHeight();
float ratio = (float)diw/dih; //get image aspect ratio

int height = width * ratio;

//don't let height exceed width
if (height > width){
height = width;
}


setMeasuredDimension(width, height);
}
else
super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

关于android - 如何动态改变ImageView的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16397753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com