图片宽度全屏显示 高度按比例显示()

来源:互联网 发布:java高级培训 编辑:程序博客网 时间:2024/05/21 14:05
前提:imageview引用图片貌似只能src,不能用background
下面是网上的方法(但不能完全实现,往下是解决方案):
Android自身不能实现这样的效果

ImageView 中有个 scaleType 属性,设置图片在 view 中的缩放方式,本来以为 fit_center 可以实现,结果很无语,莫名其妙,没能实现宽度贴合容器宽度,两侧都是空白区域。

ImageView.ScaleType设置图解

解决方法:

1. 还是要利用 scaleType 的 center_crop 效果,让图片能始终按比例填充容器,不留空白区域。

2. 剩下最主要的功能就是动态设置 ImageView 容器的高度了,这样让图片能尽可能的完整展现出来,而且还可以实现 maxHeight 的效果,如果图片高度比例过大不至于把列表拉的太长。

 

view sourceprint?
1.int maxHeight = ZUI.dp2px(mContext, 300);
2.int height = (int) ((float) view.getWidth()/drawable.getMinimumWidth() * drawable.getMinimumHeight());
3.if (height > maxHeight) height = maxHeight;
4.view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height));


 

其中 view 即 ImageView 图片视图容器对象,drawable 就是要显示的图片资源。

drawable.getMinimumWidth() 和 drawable.getMinimumHeight() 是获取图片在屏幕上的可视高度宽度,不一定是图片的原始高宽度,跟屏幕的像素密度有关,大概就是这样子的吧。注意要用浮点数值类型,不然可能取整变成 1 的倍数了。

将 dp 值转为像素值,因为 java 代码中操作的高宽都是像素值,而样式中都是用 dip 来兼容屏幕的

 

view sourceprint?
1.public static int dp2px(Context context, int dp)
2.{
3.float scale = context.getResources().getDisplayMetrics().density;
4.return (int) (dp * scale + 0.5f);
5.}
但是view.getWidth()我发现是0,又找到如下方法才能得到宽度:
getWidth在OnCreat的时候得到的是0。因为当一个view对象创建时,android并不知道其大小,所以getWidth()和   getHeight()返回的结果是0,真正大小是在计算布局时才会计算,所以会发现一个有趣的事,即在onDraw( ) 却能取得长宽的原因。那怎么在onCreat  的时候得到呢?     width = activity.getWindowManager().getDefaultDisplay().getWidth();    height = activity.getWindowManager().getDefaultDisplay().getHeight();getMeasuredWidth必须在parent view或者它自己调用measure()函数之后才能得到. measure函数就是计算该函数需要占用的空间大小.同理在设置view的长宽的时候,setWidth()很多情况下在onCreate方法中调用也会失效,要想设置成功,可以这样:int www = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);int hhh = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);this.view.measure(www, hhh);或者:editText.getLayoutParams().height = 100不过,虽然EditText在onCreate中调用setWidth会失效,但是Button却是可以的,不同的控件也要区别对待!
PS:图片显示规模:
为适应不同屏幕的手机,ImageView显示的图片可能不铺满屏幕,如果定高的话,两边可能会出现空白。魅族手机就会有这种情况,在其他手机里显示正常,在魅族手机里显示,图片左右两边会出现空白,为解决这一问题,可以使用android:scaleType属性来处理,处理方式如下:
在xml中设置直接使用:android:scaleType="centerCrop"在Java中设置使用:   imageView.setScaleType(ImageView.ScaleType. CENTER_CROP);
这里很关键的问题就是 android中ImageView的ScaleType属性ScaleType的值分别代表的意义: ImageView是Android中的基础图片显示控件,该控件有个重要的属性是ScaleType,该属性用以表示显示图片的方式,共有8种取值  ScaleType.CENTER::图片大小为原始大小,如果图片大小大于ImageView控件,则截取图片中间部分,若小于,则直接将图片居中显示。  ScaleType.CENTER_CROP:将图片等比例缩放,让图像的短边与ImageView的边长度相同,即不能留有空白,缩放后截取中间部分进行显示。  ScaleType.CENTER_INSIDE:将图片大小大于ImageView的图片进行等比例缩小,直到整幅图能够居中显示在ImageView中,小于ImageView的图片不变,直接居中显示。  ScaleType.FIT_CENTER:ImageView的默认状态,大图等比例缩小,使整幅图能够居中显示在ImageView中,小图等比例放大,同样要整体居中显示在ImageView中。  ScaleType.FIT_END:缩放方式同FIT_CENTER,只是将图片显示在右方或下方,而不是居中。  ScaleType.FIT_START:缩放方式同FIT_CENTER,只是将图片显示在左方或上方,而不是居中。  ScaleType.FIT_XY:将图片非等比例缩放到大小与ImageView相同。  ScaleType.MATRIX:是根据一个3x3的矩阵对其中图片进行缩放
0 0