我正在尝试创建自己的自定义视图,我观察onMeasure
显示为2的任何值集。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.customview.PercentageCircle
android:layout_width="match_parent"
android:layout_height="100dp"
custom:currentValue="0"
custom:maxValue="100"
custom:thickNess="80"
custom:fillBackgroundColor="@color/light_gray"
custom:fillColor="@color/red"
/>
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);//shows 200
this.setMeasuredDimension(parentWidth, parentHeight);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
当我记录parentHeight或parentWidth时,我得到指定值的两倍。我无法理解它的原因。
答案 0 :(得分:1)
Canvas函数的所有输入都以像素为单位。
onMeasure
的函数参数也以像素为单位。
要在设备上使用UI,如果我们使用像素,则在高分辨率屏幕上事物会变得太小。
要从dp转换为像素,
float heightInPixel = getHeight()/ getResources()。getDisplayMetrics()。density;