onDraw()
メソッド のカスタムビューでgetHeightとgetWidthを呼び出します。をgetHeight()
返します。ただし、画面の高さと幅の表示メトリックを見ると、それぞれ800と480が得られます。getHeightとgetWidthは何を返しますか?1,073,742,549
getWidth()
1,073,742,304
ビューのサイズを取得しているので、ビューに表示されるビットマップのサイズを選択できます。
ありがとう。
onDraw()
メソッド のカスタムビューでgetHeightとgetWidthを呼び出します。をgetHeight()
返します。ただし、画面の高さと幅の表示メトリックを見ると、それぞれ800と480が得られます。getHeightとgetWidthは何を返しますか?1,073,742,549
getWidth()
1,073,742,304
ビューのサイズを取得しているので、ビューに表示されるビットマップのサイズを選択できます。
ありがとう。
問題を明示的に解決するわけではありませんが、不思議なことに:
Width:
1,073,742,304 == 0x400001E0
480 == 0x000001E0
Height:
1,073,742,549 == 0x400002D5
725 == 0x000002D5
このカスタム ビューがおよそ 725 x 480 である可能性はありますか? その余分な0x40000000がどこから来たのかわかりませんが、1ビットを除いてほぼ正しいようです:)
getHeight()
getWidth()
サイズをピクセル単位で返しますhttp://developer.android.com/reference/android/view/View.html#getHeight%28%29を参照してください
View.MeasureSpec
余分なサイズは定数から来ている可能性がありますhttp://developer.android.com/reference/android/view/View.MeasureSpec.html#getSize%28int%29EXACTLY
を参照してください
たぶん、カスタムビューでこのようなことをしました。
final int desiredHSpec = MeasureSpec.makeMeasureSpec(pixelHeight, MeasureSpec.MODE_CONSTANT);
final int desiredWSpec = MeasureSpec.makeMeasureSpec(pixelWidth, MeasureSpec.MODE_CONSTANT);
setMeasuredDimension(desiredWSpec, desiredHSpec);
このAndroid のように: カスタム ビューで onMeasure() をオーバーライドした後、ビューのテキストが RalativeLayout に表示されないのはなぜですか?
に変更すると
setMeasuredDimension(width, height);
、onSizeChanged()およびonLayout()で単純な小さな幅、高さを取得します。
私もこの問題を抱えていました。私がそれを解決した方法は、onMeasure メソッドをオーバーライドすることでした。このようにして、ビューは常に同じサイズになります。たとえば、ビューを画面のサイズと幅にしたい場合は、次のようにする必要があります。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
WindowManager wm = (WindowManager)this.getContext().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
//display.getWidth() and display.getHeight() return the screen dimensions
this.setMeasuredDimension(display.getWidth(), display.getHeight());
}