[英]Why view.height is 3 times bigger than actual height?
我有一个高度设置为 120dp 的 ImageView。 当我得到 view.height 时,它等于 360,为什么它不等于 120?
我不确定代码不会有帮助,但是:
<ImageView
android:id="@+id/profilePic1"
android:layout_width="120dp"
android:layout_height="120dp"
android:scaleType="centerCrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:clickable="true"
app:srcCompat="@drawable/profile_pic1"/>
活动:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val layoutInflater: LayoutInflater = LayoutInflater.from(this)
val view: View = layoutInflater.inflate(R.layout.activity_edit_profile, null)
view.viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
// remove listener
view.viewTreeObserver.removeOnGlobalLayoutListener(this)
// insert coordinates (coor) of each image to imagePosition variables
Log.d("TAG", profilePic1.height.toString()) // RETURNS 360
}
})
因为在 xml 文件中,您在 DP 中给出了大小,而在 java 中,该参数以 Pixel 返回值,请检查此以了解有关 DP 和 PIxel 的更多信息
https://developer.android.com/training/multiscreen/screendensities
36x36 (0.75x) for low-density (ldpi)
48x48 (1.0x baseline) for medium-density (mdpi)
72x72 (1.5x) for high-density (hdpi)
96x96 (2.0x) for extra-high-density (xhdpi)
144x144 (3.0x) for extra-extra-high-density (xxhdpi)
192x192 (4.0x) for extra-extra-extra-high-density (xxxhdpi)
这只是因为您使用的是XXHDPI
设备,其中 120dp 正在转换为 360PX。
您应该阅读mdpi、hdpi、xhdpi 和 xxhdpi 的图像分辨率以了解 DP 和像素如何协同工作。 官方文档可以在这里找到
如果我简单地解释一下,在MDPI
1dp 几乎等于 1PX。 因此,如果您在MDPI
分辨率的设备上检查代码,您将获得120PX
输出。 但是当我在上面为其他分辨率添加了一个 URL 时,它遵循从 dp 到 PX 的转换规则。 它会给你180px in HDPI, 240px in XHDPI, 360px in XXHDPI, 480px in XXXHDPI
设备作为输出。
在 java 中,您以px
而不是dp
获得高度。 您必须将其转换为dp
才能获得正确的数据:
float px = profilePic1.height;
float dp = px / context.getResources().getDisplayMetrics().density;
// here dp should be 120
因为您在检索它时在代码中以 dp(密度像素)为单位给出了高度,所以它仅以像素为单位进行检索。 您必须将其转换为 dp。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.