2017-01-07 1 views
0

Je suis en train de créer propre vue personnalisée, j'ai observé onMeasure montre en 2 de n'importe quelle valeur définie.Vue personnalisée android onMeasure méthode montre double la valeur définie dans la mise en page

<?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); 
    } 

Lorsque je me connecte le parentHeight ou parentWidth, je reçois le double de la value.I spécifiée ne suis pas en mesure de comprendre la cause de celui-ci.

+0

vous avez 'android: layout_width =" match_parent "' alors comment cela peut-il être "doublé"? – pskink

+1

Il affiche la valeur de pixel que vous définissez 100dp en dp. –

+0

oui sauf match_parent et wrap_content il est doublé. –

Répondre

0

Toutes les entrées pour les fonctions Canvas sont en pixels. Les paramètres de fonction de onMeasure sont également en image. Pour utiliser l'interface utilisateur à travers les périphériques, Si nous utilisons des pixels, les choses deviennent trop petites sur les écrans haute résolution.

Pour convertir de dp de pixels,

flotteur heightInPixel = getHeight()/(getResources) getDisplayMetrics() densité.;.