首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android:为什么ImageView.getWidth()不对应图片资源宽度?

Android中的ImageView是用于显示图片的控件,getWidth()方法用于获取ImageView的宽度。然而,当我们调用ImageView的getWidth()方法时,返回的值并不一定等于图片资源的宽度。

这是因为ImageView的宽度可以通过多种方式进行设置,包括固定宽度、match_parent、wrap_content等。当ImageView的宽度设置为match_parent或固定宽度时,getWidth()方法返回的是ImageView的实际宽度。但是,当ImageView的宽度设置为wrap_content时,getWidth()方法返回的是ImageView的测量宽度,而不是图片资源的宽度。

这是因为ImageView在测量阶段时,会根据图片资源的大小来计算出一个合适的宽度,以保证图片能够完整显示在ImageView中。因此,当ImageView的宽度设置为wrap_content时,getWidth()方法返回的是测量后的宽度,而不是图片资源的实际宽度。

如果我们想要获取图片资源的宽度,可以使用以下方法之一:

  1. 使用BitmapFactory解码图片资源,并调用Bitmap的getWidth()方法来获取宽度。
  2. 使用Drawable的getIntrinsicWidth()方法来获取图片资源的宽度。

总结起来,ImageView的getWidth()方法返回的是ImageView的宽度,而不是图片资源的宽度。如果需要获取图片资源的宽度,可以使用其他方法来获取。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android drawable微技巧,你所不知道的drawable的那些细节

首先我准备了一张270*480像素的图片: 将图片命名为android_logo.png,然后把它放在drawable-xxhdpi文件夹下面。为什么要放在这个文件夹下呢?...那么为什么好端端的一张图片会被自动放大呢?而且这放大的比例是不是有点太过份了。其实不然,Android所做的这些缩放操作都是有它严格的规定和算法的。...首先解释一下图片为什么会被放大,当我们使用资源id来去引用一张图片时,Android会使用一些规则来去帮我们匹配最适合的图片。什么叫最适合的图片?...所以,我们可以尝试将android_logo这张图移动到drawable-xxxhdpi文件夹下面将会得到这样的结果: 可以看到,现在图片的宽和高都达到手机屏幕的四分之一,说明图片确实是被缩小了...对应android_logo这张图,原始像素是270*480,放大3倍之后就应该是810*1440像素。下面运行程序,效果如下图所示: 验证通过。

2.4K80

Android中一张图片占据的内存大小是如何计算提问正文推荐阅读

图片内存大小 网上很多文章都会介绍说,计算一张图片占用的内存大小公式:分辨率 * 每个像素点的大小。 这句话,说对也对,说不对也不对,我只是觉得,结合场景来说的话,直接就这样表达有点不严谨。...分析点2 再来看看序号 2,3,4 的实验,这三个的区别,仅仅在于图片在 res 内的不同资源目录中。当图片放在 res 内的不同目录中时,为什么最终图片加载进内存所占据的大小会不一样呢?...原图高度 * (设备的 dpi / 目录对应的 dpi ) 新图的宽度 = 原图宽度 * (设备的 dpi / 目录对应的 dpi ) 目录名称与 dpi 的对应关系如下,drawable 没带后缀对应...同样的道理,序号 3 资源目的是 hdpi 对应的是 240,而设备的 dpi 刚好也是 240,所以转换后的分辨率还是原图本身,结果也才会是 1.86MB。...图片来源是 res 内的不同资源目录时,系统会根据设备当前的 dpi 值以及资源目录所对应的 dpi 值,做一次分辨率转换,规则如下:新分辨率 = 原图横向分辨率 * (设备的 dpi / 目录对应

1.6K20

Android开发 屏幕适配之像素密度适配

而屏幕适配又包括: 屏幕尺寸(small,normal,large,xlarge , 这些在Android 3.2以上版本开始建议使用,转而使用最小屏幕宽度如 sw600dp,最小宽度,最小高度等)...图片比例 1.5 2 3 4 6 8 倍数 0.75x 1x 1.5x 2x 3x 4x 根据上面表格,如果已知像素密度,则可知对应资源目录,系统会优先从该目录中寻找图片,如果找不到会从其他目录寻找。...在新建的Android工程中默认的机器人图标,在不同密度目录下大小不一样,其比例和表格上的比例一致,在我们准备资源图片时也要按该比例进行。 后面一行的“倍数”和比例相对应,关于它的作用后面会说明。...对应上面的测试例子: 1.获取图片文件宽度48 2.转换成px单位宽度 newWidth = 48 * (320 / 160) = 96 3....由于图片存放在hdpi目录,除以hdpi对应倍数1.5 ,得到图片宽度为 96/1.5 = 64 将I619设备测试结果验证,符合以上结论。

1.2K10

Android适配全面总结(一)----屏幕适配

推荐使用奇数和小数,容易造成精度的丢失问题;小于12sp的字体会太小导致用户看不清。...下面给一个实例说明,让你更能明白这几个单位: 看下图你可以知道:为什么使用了dp作为单位,两个手机分辨率也是一样的,可是按钮显示的宽度还是不一样? ?...图片资源适配 使得图片资源在不同屏幕密度上显示相同的像素效果。   在实际开发中一个按钮的背景图片必须能够随着按钮大小的改变而改变。...注意事项: (1)对应分辨率的资源文件应放在res/values对应的文件夹中。比如分辨率为1920x1080的资源文件应放在res/values-1920x1080文件夹中。...对Android工程文件的apk包变的很大 稍微优化一下:有没有一种方法,保证屏幕密度适配,可以最小占用设计资源,使得apk包不变大(只使用一套分辨率的图片资源)?

1.8K40

Android中21种drawable标签大全

类型的子标签 rotate 可以对资源进行旋转 属性 android:drawable 指定drawable资源,如果设置该属性,也可以定义drawable类型的子标签 android:fromDegrees...bitmap 属性 android:src 必填项,指定图片资源,只能是图片,不能是xml定义的drawable资源(所以svg不行) android:gravity 设置图片的对齐方式,比如在layer-list...属性 android:drawable 指定drawable资源,如果设置该属性,也可以定义drawable类型的子标签 android:clipOrientation 设置裁剪的方向 android...adaptive-icon 自适应图标,必须在xxx-v26目录下,且其他版本目录中也要有对应资源,比如在mipmap-anydpi-v26中有一个adaptive-icon资源,在mipmap-xhdpi...否则在其他目录下直接使用这个标签会crash,其他版本目录中没有对应资源也会crash。

2.1K20

Carson带你学Android:最全面、最易懂的屏幕适配解决方案

为什么要进行Android屏幕适配 由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,于是导致: Android系统碎片化:小米定制的MIUI、魅族定制的...sw xxxdp,即small width的缩写,其区分方向,即无论是宽度还是高度,只要大于 xxxdp,就采用次此布局 例子:使用了layout-sw 600dp的最小宽度限定符,即无论是宽度还是高度...”匹配 本质:使得图片资源在不同屏幕密度上显示相同的像素效果 做法:提供备用位图(符合屏幕尺寸的图片资源) 由于 Android 可在各种屏幕密度的设备上运行,因此我们提供的位图资源应该始终可以满足各类密度的要求...先来理解下Android 加载资源过程 Android SDK会根据屏幕密度自动选择对应资源文件进行渲染加载(自动渲染) 比如说,SDK检测到你手机的分辨率是320x480(dpi=160),会优先到...drawable-mdpi文件夹下找对应图片资源;但假设你只在xhpdi文件夹下有对应图片资源文件(mdpi文件夹是空的),那么SDK会去xhpdi文件夹找到相应的图片资源文件,然后将原有大像素的图片自动缩放成小像素的图片

1.3K10

Android开发:最全面、最易懂的Android屏幕适配解决方案

---- 为什么要进行Android屏幕适配 由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,于是导致: Android系统碎片化:小米定制的MIUI...sw xxxdp,即small width的缩写,其区分方向,即无论是宽度还是高度,只要大于 xxxdp,就采用次此布局 例子:使用了layout-sw 600dp的最小宽度限定符,即无论是宽度还是高度...”匹配 本质:使得图片资源在不同屏幕密度上显示相同的像素效果 做法:提供备用位图(符合屏幕尺寸的图片资源) 由于 Android 可在各种屏幕密度的设备上运行,因此我们提供的位图资源应该始终可以满足各类密度的要求...先来理解下Android 加载资源过程 Android SDK会根据屏幕密度自动选择对应资源文件进行渲染加载(自动渲染) 比如说,SDK检测到你手机的分辨率是320x480(dpi=160),会优先到...drawable-mdpi文件夹下找对应图片资源;但假设你只在xhpdi文件夹下有对应图片资源文件(mdpi文件夹是空的),那么SDK会去xhpdi文件夹找到相应的图片资源文件,然后将原有大像素的图片自动缩放成小像素的图片

2.6K70

android系统如何自适应屏幕大小

Android有个自动匹配机制去选择对应的布局和图片资源 1)界面布局方面    根据物理尺寸的大小准备5套布局:     layout(放一些通用布局xml文件,比如界面顶部和底部的布局,...)     drawable-xhdpi:至少960dp x 720dp Android有个自动匹配机制去选择对应的布局和图片资源。   ...2)对于预缩放的资源,当android:anyDensity="false",也生效。...对应bitmap 资源来说,自动的缩放有时会造成放大缩小后的图像变得模糊不清,这是就需要应用为不同屏幕密度配置提供不同的资源:为高密度的屏幕提供高清晰度的图像等。...如果图片匹配,平台会加载默认资源并且在放大或者缩小之后可以满足当前界面的显示要求。

5.1K10

Android样式的开发:drawable汇总篇

普通图片 图片是最常用的drawable资源,格式包括:png(推荐)、jpg(可接受)、gif(建议)。...inset标签的可设置属性如下: android:drawable 指定drawable资源,如果设置该属性,也可以定义drawable类型的子标签 android:visible 设置初始的可见性状态...看看clip标签可以设置的属性: android:drawable 指定drawable资源,如果设置该属性,也可以定义drawable类型的子标签 android:clipOrientation 设置裁剪的方向...scale标签可以设置的属性如下: android:drawable 指定drawable资源,如果设置该属性,也可以定义drawable类型的子标签 android:scaleHeight 设置可缩放的高度...animated-rotate可设置的属性只有四个: android:drawable 指定drawable资源,如果设置该属性,也可以定义drawable类型的子标签 android:pivotX

2.2K10

Android 内存优化】Bitmap 图像尺寸缩小 ( 设置 Options 参数 | inJustDecodeBounds | inSampleSize | 工具类实现 )

目标图片宽高要求 : 宽度和高度只要存在一个大于限定的最大值时 , 就进行缩小操作 ; 要求指定的图片必须能放到 maxBitmapWidth 宽度 , maxBitmapHeight 高度的矩形框中...被复用的图片必须是可变的 , 解码后的 Bitmap 对象也是可变的 , 即使当解码一个资源图片时 , 经常会得到一个不可变的 Bitmap 对象 ; 2 ....为 true , 解析器会返回 null 但是 outXxx 字段会被设置对应图片属性值 , 如 : outWidth 输出图像的 宽度 , outHeight...*/ BitmapFactory.decodeResource(resources, iamgeResId, options); // 获取 iamgeResId 图片资源对应图片宽度...imageWidth = options.outWidth; // 获取 iamgeResId 图片资源对应图片高度 imageHeight = options.outHeight

2.7K20

实用Android 屏幕适配方案分享

第三、android系统自己去找相应资源目录下的  dimens.xml文件,从而获取最合适的值。这一步,不需要你的参与。 OK,完成。...电脑的显示器的分辨率、包括手机分辨率,我敢说分辨率的种类远超过Android设备的分辨率,那么有一个很奇怪的现象: 为什么Web页面设计人员从来没有说过,尼玛适配好麻烦?...标准是 160dip 即 1dp 对应 1个pixel,计算公式如:px = dp * (dpi / 160),屏幕密度越大,1dp对应 的像素点越多。 ...下面看百分比: 百分比  这个概念不用说了,web中支持控件的宽度可以去参考父控件的宽度去设置百分比,最外层控件的宽度参考屏幕尺寸设置百分比,那么其实中Android设备中,只需要支持控件能够参考屏幕的百分比去计算宽高就足够了...你可能会问:设计师设计图的分辨率固定怎么办?

1.2K100

Android全面的屏幕适配方案解析(三)

/> 3、将需要适配的Activity继承自AutoLayoutActivity,如果你希望继承AutoLayoutActivity,可以在编写布局文件时,将: LinearLayout -> AutoLinearLayout...> 测试布局文件非常的简单,只设置了图片,细心的童鞋也发现了,这里图片的宽高都是设置以px为单位,而不是我们常用的dp为单位,如图所示: image 是的,你没有看错,这里可以直接在布局文件里面使用具体的像素值...4、sw限定符适配方案 sw限定符适配即smallestWidth适配,也叫最小宽度限定符适配,指的是Android会识别到屏幕可用高度或宽度的最小尺寸的dp值,对于手机来说,这个值其实就是手机的宽度值...然后根据识别到的结果去资源文件中寻找对应限定符文件夹下的资源文件。其实这种适配方案跟之前介绍的宽高限定符适配方案原理是一样一样的,都是系统通过特定的规则来找到对应资源文件。...文件夹下的资源文件,如图所示: image 前面说了,该方案的原理跟宽高限定符适配方案是一样的,所以也需要提前设置基准尺寸,比如我这里以375dp为基准,即将任何分辨率的宽度分为375份,我们来看看基准资源文件

43310

实用Android 屏幕适配方案分享

第三、android系统自己去找相应资源目录下的  dimens.xml文件,从而获取最合适的值。这一步,不需要你的参与。 OK,完成。...电脑的显示器的分辨率、包括手机分辨率,我敢说分辨率的种类远超过Android设备的分辨率,那么有一个很奇怪的现象: 为什么Web页面设计人员从来没有说过,尼玛适配好麻烦?...标准是 160dip 即 1dp 对应 1个pixel,计算公式如:px = dp * (dpi / 160),屏幕密度越大,1dp对应 的像素点越多。 ...下面看百分比: 百分比  这个概念不用说了,web中支持控件的宽度可以去参考父控件的宽度去设置百分比,最外层控件的宽度参考屏幕尺寸设置百分比,那么其实中Android设备中,只需要支持控件能够参考屏幕的百分比去计算宽高就足够了...你可能会问:设计师设计图的分辨率固定怎么办?

1.4K70

Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题

), 在低密度显得很大, 在高密度显示的很小, 因此为了使UI组件显示大致统一(不是绝对), 美工需要一种资源设置成4份不同像素的资源, 放到对应目录中去; 设备独立像素(dip/dp) : 该像素与设备硬件有关...: 按照该密度计算 1280dp对应的是 1280 * 149.82 / 160 = 1198.4 个像素; 举例 :  给一个Textview控件设置1280dp的宽度, 然后可以看到该组件横向沾满宽度..., 按照实际运算该1280dp对应的是1198个像素, 是无法占满整个屏幕的; XML布局文件 :  <LinearLayout xmlns:android="http://schemas.android.com...Android资源适配 (1) 图片资源适配 图片资源失真问题: 图片资源的大小是按照像素计算的, 在密度不同的时候显示大小也不相同, 因此会根据密度的不同制作不同像素的图片, 以避免失真; -- 低密度手机显示...: 如果在低密度的手机上, 分辨率低, 图片占用像素个数不变, 图片会显得很大; -- 高密度手机显示 : 如果在高密度的手机上, 分辨率高, 图片占用像素个数不变, 图片会显得很小;  根据密度选择资源

57820

聊聊有关SVG那些事儿

微信文章阅读后感 首先,微信提出了几个论点: “清晰”和“体积”的矛盾与麻烦 面对android的各种dpi某事,想要所有设备上的图片都能有最清晰的效果,就意味着每种dpi模式都必须提供一份对应尺寸的资源...(想要清晰,每种dpi都需要放置对应图片,相应的缺点就是造成Apk会随着图片越来越多而越来越大)在过去的几年里andorid从mdpi发展到xxxhdpi,每当微信想让相同的图片在更清晰的屏幕上显示我们想要的效果时...(保留一种图片,Apk大小确实减小了,相对应的兼容性却大大降低,这时候,就主要考虑兼容性的问题) 矢量图SVG 栅格图自身特点导致了高清资源同安装包体积之间的矛盾。...这方面矢量图存在明显的优势,它可以在表达清晰图片的同时,增加文件体积。而且只要你不重新设计图片,就用不着再去适配高dpi模式,矢量图什么分辨率都可以自适应。...android:width="24dp" // 宽度 android:height="24dp" // 高度 android:alpha="0.80" // 透明度 android

1.3K40
领券