该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在Android当中我们经常会遇到需要将一个图片拉伸用于填充屏幕的问题,
对于拉伸图片符合屏幕大小,我们通常可以在这个ImageView的配置文件
当中加入android:scaleType="ScaleType.MATRIX"就可以了,但是
这样就会导致图片的大小失真,整个图片被拉伸的特变难看。所以我们
需要一种能够有选择的拉伸我们的图片,导致不致失真。
下面是一种简单的做法,但是不能够保证能解决所有遇到这种问题的场合,
所以,如果读到这篇文章的你发现了更好的解决办法,希望一定要联系我。
好了,下面就是解决的办法:
package com.yourpackage.widgets;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;
public class AspectRatioImageView extends ImageView
{
public AspectRatioImageView(Context context)
{
super(context);
}
public AspectRatioImageView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public AspectRatioImageView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth();
setMeasuredDimension(width, height);
}
}
复制代码
整个过程很简答,就是在onMeasure()阶段时将图片的Aspect ratio(长宽比)考虑进去,这样
比单纯的机械的使用ScaleType.MATRIX或者ScaleType.FIT_XY要更能针对我们的目标和需求
(当然ScaleType.MATRIX和ScaleType.FIT_XY也有自己的适用场合,而且也比我们的技巧更为
专业,只是不符合我们暂时的需求而已).
然后我们就可以在XML文件当中对使用我们定义好的这个AspectRatioImageView了:
android:src="@drawable/yourdrawable" android:id="@+id/image"
android:layout_alignParentTop="true" android:layout_height="wrap_content"
android:layout_width="match_parent" android:adjustViewBounds="true" />
复制代码
如果遇到任何问题,请与我联系。希望能帮助到你。