2013-09-04 11 views
6

onMeasure()がすでに呼び出された後、getWidth()とgetHeight()に対してアプリケーションのビューが0を返すことがわかりました。これは、ほんの一握りのデバイスでのみ起こります。ほとんどのアンドロイドデバイスでは、次のコードが正常に動作します。私のcheckViewAndLoad()関数は、ビューのサイズに応じてスケールされたビットマップを読み込みます。ここonMeasure()(特定のデバイス)の後にgetWidth()とgetHeightが0を返す

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    Log.d("widthMeasureSpec", Integer.toString(MeasureSpec.getSize(widthMeasureSpec))); 
    Log.d("heightMeasureSpec", Integer.toString(MeasureSpec.getSize(heightMeasureSpec))); 
    Log.d("viewWidth", Integer.toString(getWidth())); 
    Log.d("viewHeight", Integer.toString(getHeight())); 

    checkViewAndLoad(); 
} 

はonMeasure(後の()/のgetHeight())のgetWidthゼロを返すデバイス(モトローラドロイドRazrのマックス)の対数である:

09-03 20:55:58.359: D/widthMeasureSpec(29496): 540 
09-03 20:55:58.359: D/heightMeasureSpec(29496): 720 
09-03 20:55:58.359: D/viewWidth(29496): 0 
09-03 20:55:58.359: D/viewHeight(29496): 0 

Iはまた、(setMeasuredDimensionsしようとしました)その手はログに影響を与えません。

ここで間違っていること、またはonMeasure()が呼び出された後にSurfaceViewの幅/高さを取得する方法を教えてもらえますか?

答えて

9

ここでgetMeasuredWidth/Height()を使用してください。 getWidth/Height()は、レイアウト後まで無効です。

1

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)); 

    Log.d("widthMeasureSpec", Integer.toString(MeasureSpec.getSize(widthMeasureSpec))); 
    Log.d("heightMeasureSpec", Integer.toString(MeasureSpec.getSize(heightMeasureSpec))); 
    Log.d("viewWidth", Integer.toString(getWidth())); 
    Log.d("viewHeight", Integer.toString(getHeight())); 

    if(getMeasuredWidth()!=0 && getMeasuredHeight()!=0){ 
       checkViewAndLoad(); 
    } 

} 
この方法を試してみてください
関連する問題