Размер изображений в андроиде изображения

У меня есть imageView внутри listView. Настройте так: main.xml

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

image.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:scaleType="center" android:src="@drawable/ic_launcher" /> </RelativeLayout> 

Это отлично работает, заполняя множество изображений из URL с запросом HTTP. Но у меня проблема с размером изображений. Я хочу, чтобы они заполняли экран независимо от разрешения или размера. Пробовал с разной высотой макета, шириной и scaleType, но не мог заставить его работать правильно.

Первое изображение – как это выглядит сейчас, второе изображение – как я хочу, чтобы он выглядел.

EDIT: попробовал с scaleType = "fitXY", который дал мне 100% ширину, но плохую высоту на более длинных изображениях.

Вот как это выглядит сейчасВот как я хочу, чтобы он выглядел

Solutions Collecting From Web of "Размер изображений в андроиде изображения"

У меня была такая же проблема, и я не нашел другого решения, кроме создания собственного класса.

 public class Banner extends View { private final Drawable mDrawable; public Banner(Context context) { this(context, null); } public Banner(Context context, AttributeSet attrs) { this(context, attrs, 0); } public Banner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Banner, 0, 0); try { mDrawable = a.getDrawable(R.styleable.Banner_image); } finally { a.recycle(); } setBackgroundDrawable(mDrawable); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = 0; int height = 0; if(mDrawable != null) { width = MeasureSpec.getSize(widthMeasureSpec); height = width * mDrawable.getIntrinsicHeight() / mDrawable.getIntrinsicWidth(); } setMeasuredDimension(width, height); } } 

Затем добавьте атрибуты в какой-либо файл в папке /values

 <declare-styleable name="Banner"> <attr name="image" format="reference" /> </declare-styleable> 

И использовать этот новый код как это

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:banner="http://schemas.android.com/apk/res/your.project.name.here" android:layout_width="fill_parent" android:layout_ height="wrap_content" android:orientation="vertical" > <your.project.name.here.Banner android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" banner:image="@drawable/ic_launcher" /> </RelativeLayout> 

Он будет регулировать высоту пропорционально ширине изображения

 // try this <?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" /> 

Использование изображений NinePatch

Ссылка здесь

Вы использовали его как:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:scaleType="center" android:src="@drawable/ic_launcher" /> </RelativeLayout> 

Попробуйте это, у меня есть изменения:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="200dp" android:layout_height="200dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:scaleType="FITXY" android:src="@drawable/ic_launcher" /> </RelativeLayout> 

Установить фиксированный размер изображения, а затем скатить FITXY. Я надеюсь, что проблема будет решена с этим.

Согласно вашему требованию. Вы должны поместить свой код так,

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:scaleType="fitXY" android:src="@drawable/ic_launcher" /> </RelativeLayout> 

Вместо android:src="@drawable/ic_launcher" используйте android:background="@drawable/ic_launcher" а также в использовании файла java :

 yourImageView.setBackgroundDrawable(new BitmapDrawable(getResources(), bitmap)); 

Если мы используем android:src он устанавливает изображение в соответствии с его разрешением для установки на экран. И если мы установим изображение в качестве фона, мы можем установить желаемую width и height

Похоже, что вы хотите андроид: adjustViewBounds = "true" и android: scaleType = "centerInside" в ваших изображениях.

Кроме того, если вы не делаете что-то еще, не показанное в вашем вопросе с RelativeLayout в image.xml, это бессмысленно.