8

onDraw()メソッド のカスタムビューでgetHeightとgetWidthを呼び出します。をgetHeight()返します。ただし、画面の高さと幅の表示メトリックを見ると、それぞれ800と480が得られます。getHeightとgetWidthは何を返しますか?1,073,742,549getWidth()1,073,742,304

ビューのサイズを取得しているので、ビューに表示されるビットマップのサイズを選択できます。

ありがとう。

4

4 に答える 4

11

問題を明示的に解決するわけではありませんが、不思議なことに:

Width:
1,073,742,304 == 0x400001E0
          480 == 0x000001E0

Height:
1,073,742,549 == 0x400002D5
          725 == 0x000002D5

このカスタム ビューがおよそ 725 x 480 である可能性はありますか? その余分な0x40000000がどこから来たのかわかりませんが、1ビットを除いてほぼ正しいようです:)

于 2012-04-09T23:42:06.933 に答える
5

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を参照してください

于 2012-04-09T23:36:57.510 に答える
3

たぶん、カスタムビューでこのようなことをしました。

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()で単純な小さな幅、高さを取得します。

于 2012-12-21T09:00:34.317 に答える
0

私もこの問題を抱えていました。私がそれを解決した方法は、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());
    }
于 2013-07-20T18:06:41.940 に答える