android 中图片变形问题

天王盖地虎626 发布于 2016/04/22 10:36
阅读 752
收藏 0

请教一个问题,见下图,这个界面最外层布局是 RelativeLayout,然后把顶部,底部设定好后,中间层是个FrameLayout,把这个FrameLayout的宽高属性设定为fill_parent,这个FrameLayout里只有一个imageview

设定好imageview的图片,同时设定imageView.setScaleType(ImageView.ScaleType.CENTER);

我想请问下,这个时候,其图片的宽高实际上是多少呢?

如果按照我的计算,首先取到屏幕宽高,比如是hight,width

其中顶部和底部分别是hight1,hight2,屏幕宽度两边边距距离是width1,width2

也就是说imageView的宽高最多是 

imgWidth=width -width1-width2;

 imgHeight =height -height1-height2;


因为imageview设置为ImageView.ScaleType.CENTER

然后图片转换成bitmap进行缩放处理

获取到bitmap的实际宽高是 bitWidth,bitHeight

假如 imgWidth/bitWidth =0.5;  imgHeight/bitHeight =0.4

也就是说,高度按照2.25倍率放大图片,宽度自然也放大2.25倍,因为宽度的倍率放大到2倍就撑满空间,所以系统会自动截取宽度,不知道我这样分析对不对?


加载中
0
好有味
好有味
楼主好牛逼 膜拜
0
天王盖地虎626
天王盖地虎626

引用来自“好有味”的评论

楼主好牛逼 膜拜
我在寻求答案的呀,你这是在鄙我呢,还是夸我呀
0
天王盖地虎626
天王盖地虎626
怎么没人回答问题呀
0
天王盖地虎626
天王盖地虎626

我测试了下,我的计算有错误,原因,我没有考虑状态栏和标题栏的高度

imgHeight =height -height1-height2;-标题栏高度-状态栏高度

通过分别设置

 android:scaleType  ="centerCrop"和 android:scaleType  ="centerInside",我发现获得的matrix分别是

Matrix{[0.68, 0.0, 0.0][0.0, 0.68, -278.0][0.0, 0.0, 1.0]}

Matrix{[0.47113943, 0.0, 157.0][0.0, 0.47113943, 0.0][0.0, 0.0, 1.0]}
同时我计算出img控件的宽高分别是

img_width: 1020
img_height: 1257

bitmap的宽高分别是
bmap.getWidth: 1500;
bmap.getHeight:2668


根据centerCrop特性,我计算出缩放比

1500*0.68=1020,正好撑满img宽度,高度理论上是

2668 *0.68=1814,因为img高度才1257,所以需要截取高度

同理根据centerInside特性,我计算出缩放比

2668 *0.47=1253 很接近1257了,算是高度撑满

宽度 1500*0.47 =705,但是img实际的宽度是1020,所以,两边有很大的留白空间

返回顶部
顶部