gpt4 book ai didi

Android ImageView调整父级高度和适配宽度

转载 作者:IT老高 更新时间:2023-10-28 13:19:32 28 4
gpt4 key购买 nike

更新 : 我使用 this answer 中描述的方法解决了这个问题

我有点纠结这个问题,我认为应该很简单。

所以我的应用程序下载了一张图片,并在 ImageView(RelativeLayout 的一个子元素)中呈现位图。我希望 ImageView 适合父宽度,并调整它的大小以保持纵横比。

这是我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout android:id="@+id/banner" android:layout_width="fill_parent" android:layout_height="wrap_content"></RelativeLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>

还有代码:

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);


RelativeLayout banner = (RelativeLayout) findViewById(R.id.banner);
ImageView imgV = new ImageView(this);

imgV.setScaleType(ImageView.ScaleType.CENTER_CROP);
// I tried all the scale types : CENTER_INSIDE : same effect, FIT_CENTER : same effect...

imgV.setBackgroundColor(0x00FFFF00);

imgV.setAdjustViewBounds(Color.BLUE);


RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

banner.addView(imgV,params);

// Some code downloading the image stream

bitmap = BitmapFactory.decodeStream(stream);


imgV.setImageBitmap(bitmap);

}

期望:

Desired result

结果:

Current result

最佳答案

感谢@Julien 和@js。这是 ImageView 的完整解决方案,即使位图小于 ImageView,也会拉伸(stretch)位图高度保持纵横比。

public class ResizableImageView extends ImageView {

public ResizableImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
Drawable d = getDrawable();

if(d!=null){
// ceil not round - avoid thin vertical gaps along the left/right edges
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth());
setMeasuredDimension(width, height);
}else{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

}

你可以在你的 xml 布局中使用这个类来代替 ImageView。

<com.example.ResizableImageView
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/banner" />

关于Android ImageView调整父级高度和适配宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5554682/

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