Android同一图片在不同分辨率下长宽不同

本文描述了在不同设备上绘制地图路线时遇到的问题。作者在Genymotion虚拟机上正常运行的应用,在Android自带虚拟机及实际设备上出现路线偏差。原因是不同分辨率下,通过Bitmap获取的宽高值发生变化,导致缩放比例不准确。

帮同学写一个小APP,需要在一张地图上画出算法给出的实际路线。


程序在Genymotion虚拟机上运行时显示正常,但是在Android自带的虚拟机和我自己的安卓机上显示却出现了偏差。


画路线时,先根据屏幕大小调整地图的大小,通过Bitmap的getWidth和getHeight得到图片的宽和高,进而求出scale进行缩放。然而打印出来却发现,在Genymotion上和图片的真实大小一样,但是在Android自带的虚拟机上宽和高分别变成了两倍,而在我自己的安卓机上宽和高变成了1.5倍。由此导致scale不准确,进而画路线时出现了偏差。


查阅资料才得知,同一张图片在不同分辨率下,图片的大小会发生变化,通过Bitmap的getWidth和getHeight得到的图片的宽和高自然也会变大或者变小。


搞了一晚上,真累!


不同场景下,使图片不同屏幕分辨率下自适应大小不同的实现方法。 在 Android 开发中,为了适应不同分辨率,需要将不同图片放到不同的 drawable 目录下,分辨率的匹配规则如下: - drawable - mdpi:对应 320 * 480 分辨率 - drawable - hdpi:对应 480 * 800 分辨率 - drawable - xhdpi:对应 720 * 1280 分辨率 - drawable - xxhdpi:对应 1080 * 1920 分辨率 - drawable - xxxhdpi:对应 1080+ 分辨率 [^4] 同时,还可以使用 `ImageView.ScaleType.CENTER_CROP` 或在 XML 中设置 `android:scaleType="centerCrop"`。这种方式以原图的几何中心点和 `ImageView` 的几何中心点为基准,按比例扩大(图片小于 `View` 的时)图片的 size 居中显示,使得图片长()等于或大于 `View` 的长(),并按 `View` 的大小截取图片。当原图的 size 大于 `ImageView` 时,按比例缩小图片,使得长宽中有一向等于 `ImageView`,另一向大于 `ImageView`,实际上,会使得原图的 size 大于等于 `ImageView` [^5]。 在网页开发中,可使用 CSS 实现背景图片自适应屏幕大小。例如可以利用媒体查询来根据不同的屏幕尺寸设置不同的样式。以下是一个简单示例: ```css /* 打印样式 */ @media print { color: red; } /* 手机等小屏幕手持设备 */ @media screen and (min-width: 320px) and (max-width: 480px) { body { background: yellow; } } /* 平板之类的度 1024 以下设备 */ @media only screen and (min-width: 481px) and (max-width: 1024px) { /* 可在这里设置对应样式 */ } ``` 通过媒体查询可以针对不同的屏幕分辨率范围设置不同图片显示样式,以达到自适应的效果 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值