1

の寸法のビットマップがあり537 * 233ます。これは私のフラグメントに表示されます。

コードでもこのビットマップの高さを計算しています。

単純に使って、

image.getHeight()常に 0 を返します。

次に、オーバーライドされたメソッドに同じものを入れるとonGlobalLayout()、実際の高さが得られることがわかりました。

私はそれをしました。リンクについては、SO の投稿を参照してください。

今私が得ている高さは155です。

私も高さを取得しようとしましたが、

BitmapDrawable bd = (BitmapDrawable) getResources().getDrawable(R.drawable.chart);

imgHeight = bd.getBitmap().getHeight();

再び私が得ている高さは155です。

上記の寸法によると、高さは です233

エミュレーターでも同じ高さを見ています。

違いはなぜですか、および/または実際の高さと見なされるのはなぜですか?

アップデート:

わかりました、チャートが入っdrawable-hdpiていて、デバイスの密度は です160。そのため、チャート画像をフォルダーに入れるとdrawable、正しい高さが得られました。しかし、チャートの高さが固定されている場合 (233)、なぜ一部のデバイスではチャートの高さが下のタイムラインと重なるのに十分な大きさになるのでしょうか。これはおおよその値が原因であり、正確な値 (密度、解像度) ではないことが原因である可能性があることは少し知っていますが、それが不一致の原因となっています。しかし、それを修正する方法はありますか?

4

1 に答える 1

1

まず、mdpi = 1、hdpi = 1.5、xhdpi = 2 を知っています。mdpi
フォルダーに幅 = 100px の画像があるとします。
mdpi デバイスでは画像の幅は 100x1 = 100px、
hdpi デバイスでは 100x1.5 = 150px、
xhdpi デバイスでは 100x2 = 200px になります。
hdpiまたはxhdpiフォルダーに画像がない場合、Androidシステムはそれらをスケーリングします。

そのため、フォルダーに画像があり、hdpi中密度デバイス ( ) でアプリを実行するとmdpi、Android は画像を 1.5 倍に縮小します。233 / 1.5 = 155.
アプリをhdpiデバイスで実行すると、幅が ~310 の画像が得られます。

したがって、スケーリングを避けるために、画像をdrawable-nodpiフォルダーに入れることをお勧めします (このフォルダー内の画像は、Android システムによってスケーリングされません)。

PS: 画像をフォルダーに入れてdrawablemdpi デバイスで実行すると、drawableフォルダー =であるため、画像はスケーリングされません。drawable-mdpi

于 2013-09-03T10:15:00.027 に答える