Просмотрщик Фото Для Андроид: По Ширине
я загружаю изображение и устанавливаю его в качестве фона экрана динамически с помощью Imageview
. Я пробовал ScaleType
, для масштабирования изображения.
если высота изображения больше ширины, то ScaleTypes
fitStart
,fitEnd
и fitCenter
не работают. Android масштабирует фотографию и подгоняет ее по высоте, но я вижу дополнительное пустое пространство как часть ширины.
Я хочу уменьшить масштаб фотографии на основе ширины, чтобы она соответствовала ширине, и мне все равно, есть ли какие-то дополнительные пустое пространство как часть высоты или если высота слишком длинная, это нормально, если она выходит из вида(если это возможно?).
ScaleType.XY
масштабируйте фотографию и установите все в ImageView
и не заботится о соотношении высоты изображения/вес.
<ImageView
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitStart"
/>
6 ответов:
Я в конечном итоге с помощью этого кода:
<ImageView android:id="@+id/background" android:layout_width="match_parent" android:layout_height="match_parent" android:adjustViewBounds="true" android:scaleType="centerCrop" android:src="@drawable/name" />
убедитесь, что вы установили образ с помощью
src
вместоbackground
.
это элегантное решение нашли здесь будет работать как шарм для вас.
в основном вам просто нужно создать небольшой класс, который расширяет
ImageView
и просто переопределитьonMeasure
метод для регулировки ширины и высоты, как вы хотите. Здесь он масштабируется по ширине с помощью:@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth(); setMeasuredDimension(width, height); }
вы бы использовали этот специальный
ImageView
такой:<your.activity.package.AspectRatioImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center_vertical" android:src="@drawable/test" />
существует простой метод, если вы просто хотите заполнить ширину экрана и иметь пропорциональную высоту (и знать соотношение изображения), вы можете сделать это в OnCreate ():
setContentView(R.layout.truppview_activity); trupImage = (ImageView) findViewById(R.id.trupImage); Display display = getWindowManager().getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics(); display.getMetrics(outMetrics); float scWidth = outMetrics.widthPixels; trupImage.getLayoutParams().width = (int) scWidth; trupImage.getLayoutParams().height = (int) (scWidth * 0.6f);
где 0,6-это регулировка соотношения (вы также можете автоматически вычислить, конечно, если вы знаете w & h изображения).
PS:
Вот сторона XML:<ImageView android:id="@+id/trupImage" android:layout_width="match_parent" android:background="@color/orange" android:layout_height="match_parent" android:adjustViewBounds="true" android:scaleType="fitCenter" />
это работает для меня.
создать класс расширяет ImageView
package com.yourdomain.utils; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; 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) { 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.yourdomain.utils.ResizableImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/test" />
Я думаю, что вы не можете сделать это только с XML, вам нужно изменить себя, растровый
Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); try { ((ImageView) findViewById(R.id.background)) .setImageBitmap(ShrinkBitmap(width)); } catch (FileNotFoundException e) { e.printStackTrace(); }
затем
private Bitmap ShrinkBitmap(int width) throws FileNotFoundException { BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); bmpFactoryOptions.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img, bmpFactoryOptions); int widthRatio = (int) android.util.FloatMath .ceil(bmpFactoryOptions.outWidth / (float) width); bmpFactoryOptions.inSampleSize = widthRatio; if (bmpFactoryOptions.inSampleSize <= 0) bmpFactoryOptions.inSampleSize = 0; bmpFactoryOptions.inPreferredConfig = Bitmap.Config.ARGB_8888; bmpFactoryOptions.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img, bmpFactoryOptions); return bitmap; }
и макет
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/background" android:layout_width="wrap_content" android:layout_height="wrap_content" />