Android ImageView:适合宽度
我下载图像,并使用Imageview
dynamic设置为屏幕背景。 我已经尝试过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" />
我结束了使用这个代码:
<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
来设置图像。
android:adjustViewBounds="true"
做这个工作!
这个在这里find的优雅的解决scheme将像你的魅力工作。
基本上你只需要创build一个扩展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是比例调整(当然,如果你知道图像的话,你也可以自动计算)。
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" />
这对我有用。
创build一个类扩展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" />