自定义视图android onMeasure方法显示布局中设置的值的两倍

时间:2017-01-07 12:05:12

标签: android android-canvas android-custom-view

我正在尝试创建自己的自定义视图,我观察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时,我得到指定值的两倍。我无法理解它的原因。

1 个答案:

答案 0 :(得分:1)

Canvas函数的所有输入都以像素为单位。 onMeasure的函数参数也以像素为单位。 要在设备上使用UI,如果我们使用像素,则在高分辨率屏幕上事物会变得太小。

要从dp转换为像素,

  

float heightInPixel = getHeight()/ getResources()。getDisplayMetrics()。density;