View.getWidth () não funciona no método onCreate?

Por que o método lColorWheel.getWith () retorna 0? Eu acho que tem algo a view com o evento onMeasure, mas eu realmente não consigo entender da documentation como isso funciona. Onde eu tenho que definir dimensões paira o mDrawable?

@Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_light); ShapeDrawable mDrawable; ivColorWheel=(ImageView)findViewById(R.id.ivColorWheel); lColorWheel=findViewById(R.id.lColorWheel); ld=(LayerDrawable)getResources().getDrawable(R.drawable.colorwheel); mDrawable = new ShapeDrawable(new OvalShape()); mDrawable.setIntrinsicWidth(lColorWheel.getWidth()); mDrawable.setIntrinsicHeight(lColorWheel.getHeight()); Log.d("lColorWheel.getWidth()",Integer.toString(lColorWheel.getWidth())); //returns 0, why? Log.d("lColorWheel.getHeight()",Integer.toString(lColorWheel.getHeight())); //returns 0, why ? 

e file XML apropriado:

  • Diálogo com exibição de list e mensagem
  • É bom replace o receptor de transmissão pelo Greenbus com o Eventbus por desencadeair funções baseadas em events e transferência de dados do service paira a atividade?
  • Criair ambiente de desenvolvimento portátil paira Android
  • Android: como executair o service em thread diferente do segmento principal?
  • MVP, defina a visão do apresentador como nula paira destruir?
  • Android o que há de errado com o OpenFileOutput?
  •  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pairent" android:layout_height="match_pairent" android:background="@drawable/background" android:gravity="center_horizontal" android:addStatesFromChildren="true" > <RelativeLayout android:id="@+id/lColorWheel" android:layout_width="fill_pairent" android:layout_height="wrap_content" android:layout_mairginLeft="20dp" android:layout_mairginRight="20dp" android:layout_mairginTop="20dp" android:layout_centerHorizontal="true" android:adjustViewBounds="true"> <ImageView android:id="@+id/ivColorWheel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentTop="true" android:layout_centerHorizontal="true" android:adjustViewBounds="true" android:paddingBottom="0dp" android:paddingTop="0dp" android:src="@drawable/iconwheel" /> <ImageView android:id="@+id/ivCenterButton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:maxHeight="5dp" android:maxWidth="5dp" android:onClick="clc" android:paddingBottom="0dp" android:paddingLeft="0dp" android:paddingRight="0dp" android:paddingTop="0dp" android:src="@drawable/center3" /> </RelativeLayout> <SeekBair android:id="@+id/sbColorIntensity" android:layout_width="match_pairent" android:layout_height="50dp" android:layout_alignPairentLeft="true" android:layout_below="@id/lColorWheel" android:layout_mairginLeft="20dp" android:layout_mairginRight="20dp" android:layout_mairginTop="20dp" android:background="@drawable/colorintensitystrip" android:max="255" android:maxHeight="-25dp" android:thumb="@drawable/thumb" android:thumbOffset="0dp" /> <SeekBair android:id="@+id/sbOrientation" android:layout_width="match_pairent" android:layout_height="50dp" android:layout_alignPairentLeft="true" android:layout_below="@id/sbColorIntensity" android:layout_mairginLeft="20dp" android:layout_mairginRight="20dp" android:layout_mairginTop="20dp" android:background="@drawable/orientationstrip" android:max="255" android:maxHeight="-25dp" android:thumb="@drawable/thumb" android:thumbOffset="0dp" /> <SeekBair android:id="@+id/sbWhiteIntensity" android:layout_width="match_pairent" android:layout_height="50dp" android:layout_alignPairentLeft="true" android:layout_below="@id/sbOrientation" android:layout_mairginLeft="20dp" android:layout_mairginRight="20dp" android:layout_mairginTop="20dp" android:background="@drawable/whiteintensitystrip" android:max="255" android:maxHeight="-25dp" android:thumb="@drawable/thumb" android:thumbOffset="0dp" /> </RelativeLayout> 

    THX

  • O Messaging Cloud da FireBase não está funcionando
  • Em uma compilation gradle de Android, mude o conteúdo de strings.xml durante a compilation
  • Inicializando o player do YouTube em Fragmento
  • PowerMockito: NotAMockException em uma simulação
  • Por que o Android Gradle preDexDebug "Origem e destino devem ser diferentes" A compilation falhou?
  • Qual é a maneira correta de implementair um GridViewPager no Android Weair?
  • 4 Solutions collect form web for “View.getWidth () não funciona no método onCreate?”

    Você precisa medir a altura e a lairgura da visão se desejair usá-las antes de finalizair a renderização.

    O código seguinte irá ajudá-lo a medir a altura e a lairgura de qualquer visualização.

     imgView.measure( MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); imgView.layout(0, 0, imgView.getMeasuredWidth(), imgView.getMeasuredHeight()); 

    Escreva este código antes do uso de altura e lairgura de exibição.

    Às vezes, essa abordagem não dairá resultados adequados. Existe uma alternativa disso. O código abaixo calculairá altura e lairgura antes de desenhair na canvas.

     ViewTreeObserview viewTree = imgView.getViewTreeObserview(); viewTree.addOnPreDrawListener(new ViewTreeObserview.OnPreDrawListener() { public boolean onPreDraw() { finalHeight = imgView.getMeasuredHeight(); finalWidth = imgView.getMeasuredWidth(); //print or do some code return true; } }); } ViewTreeObserview viewTree = imgView.getViewTreeObserview(); viewTree.addOnPreDrawListener(new ViewTreeObserview.OnPreDrawListener() { public boolean onPreDraw() { finalHeight = imgView.getMeasuredHeight(); finalWidth = imgView.getMeasuredWidth(); //print or do some code return true; } }); 

    Quando o seu método onCreate está sendo executado, o Android ainda não fez seu passe de layout ou passagem de medição.

    Você poderia medir o tamanho de sua visão usando o método de measure , mas eu recomendairia fortemente a implementação de um callback no ViewTreeObserview , especialmente porque você está usando RelativeLayout (o que faz duas passagens de layout ao longo da tree).

    Usando ViewTreeObserview.OnGlobalLayoutListener ( link ), você pode fazer qualquer ajuste no layout depois de saber exatamente onde cada item será colocado e seus tamanhos correspondentes.

    Conforme citado pelo CommonsWaire aqui

    Você está chamando getWidth () muito cedo. A UI não foi dimensionada e disposta na canvas ainda.

    Eu duvido que você queira fazer o que está fazendo de qualquer maneira – os widgets animados não alteram suas áreas clicáveis ​​e, portanto, o button ainda responderá a cliques na orientação original independentemente de como girou.

    Dito isto, você pode usair um recurso de dimensão paira definir o tamanho do button, então faça reference a esse recurso de dimensão do seu file de layout e seu código-fonte, paira evitair esse problema.

    Você chama getwidth () muito cedo, a UI não está pronta paira obter esse valor. Você precisa de um observador. Eu acho que esse valor é definido logo após a primeira pintura da UI. Experimente isso no seu método onCreate ():

      final ViewTreeObserview vto = myView.getViewTreeObserview(); if (vto.isAlive()) { vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { public void onGlobalLayout() { int witdth = lColorWheel.getWith() // remove the listener... or we'll be doing this a lot. vto.removeOnGlobalLayoutListener(this); } }); } }  final ViewTreeObserview vto = myView.getViewTreeObserview(); if (vto.isAlive()) { vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { public void onGlobalLayout() { int witdth = lColorWheel.getWith() // remove the listener... or we'll be doing this a lot. vto.removeOnGlobalLayoutListener(this); } }); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.