图片宽度全屏显示 高度按比例显示()
来源:互联网 发布:java高级培训 编辑:程序博客网 时间:2024/05/21 14:05
前提:imageview引用图片貌似只能用src,不能用background
下面是网上的方法(但不能完全实现,往下是解决方案):
Android自身不能实现这样的效果
ImageView 中有个 scaleType 属性,设置图片在 view 中的缩放方式,本来以为 fit_center 可以实现,结果很无语,莫名其妙,没能实现宽度贴合容器宽度,两侧都是空白区域。
ImageView.ScaleType设置图解
解决方法:
1. 还是要利用 scaleType 的 center_crop 效果,让图片能始终按比例填充容器,不留空白区域。
2. 剩下最主要的功能就是动态设置 ImageView 容器的高度了,这样让图片能尽可能的完整展现出来,而且还可以实现 maxHeight 的效果,如果图片高度比例过大不至于把列表拉的太长。
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 来兼容屏幕的
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
- 图片宽度全屏显示 高度按比例显示()
- 解决让图片宽度全屏高度按比例自适应填充
- Adapter中按比例显示不同高度的图片
- 图片按比例显示
- 图片按比例显示
- 如何按比例显示图片
- 控制图片按比例显示(1)
- 控制图片按比例显示[FREETEXTBOX](2)
- ImageView图片宽度为控件宽度,高度按比例缩放
- [转载]ImageView图片宽度为控件宽度,高度按比例缩放
- ImageView图片宽度为控件宽度,高度按比例缩放
- 图片宽度为控件宽度,高度按比例缩放
- html中背景图按比例缩放全屏显示
- html中背景图按比例缩放全屏显示
- 最新javascript自动按比例显示图片,按比例压缩图片显示
- 最新javascript自动按比例显示图片,按比例压缩图片显示
- 页面图片显示(按比例缩放
- 让图片按比例缩放显示
- jdk7新特性学习笔记
- 系统架构师???
- iOS手势总结
- 小希的迷宫
- 连接到CentOS(Linux)服务器ssh、mysql缓慢
- 图片宽度全屏显示 高度按比例显示()
- ubuntu14.04 osg3.0.1 qt4.8.6 boost1.58编译安装
- alarmmanager定时任务
- 单例模式
- qnx6.5 app自启动操作
- 网页javascript 与flash之间的交互
- Axis2开发webservice
- 设置Textview最大长度,超出显示省略号
- Broadcast广播消息demo