1

アプリの中央に丸い円があります。480x800の解像度ではすべてが完了しますが、320x480の解像度では円が小さすぎます。drawable-hdpiフォルダーに470pxx470pxのcircle.pngがあります。drawable-mdpiフォルダーに310x310のcircle.pngを追加しようとしましたが、結果は同じでした。これは、レイアウトxmlのコードです。

<ImageView
    android:id="@+id/indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"

    />

すべての解像度で、円のディスプレイの左端と右端までの距離がわずか数ピクセルである可能性はありますか?

http://imageshack.us/photo/my-images/857/apppv.jpg/

編集:私はこの問題を最終的にこのように解決しました:

LayoutParams lp = indicator.getLayoutParams();
lp.width = (int) (disW-(disW*0.06));
lp.height = (int) (disW-(disW*0.06));
indicator.setLayoutParams(lp);

//これは完全に機能し、アスペクト比は正しいです。

EDIT2:スケーリングされた画像の画質が本当に悪いので、これはまったく解決策ではありません...しかし、私は2つのチュートリアルを見つけました:http: //developer.sonymobile.com/wp/2011/06/27/how- to-scale-images-for-your-android%E2%84%A2-application / http://android.creid.eu/how-to-resize-an-image-and-preserve-quality/

私はどちらが最善の方法であるかを考え出さなければなりません...

4

3 に答える 3

1

私の最初の考えは、あなたの決議をきれいにすることです。

あなたの画像は数値的に扱いにくい寸法になっています。470 = 2 * 5 * 47. 純粋に数論的な観点から見ると、47 は魅力的な数ですが、分解して利益を得ることができないため、ここでは何の役にも立ちません。あなたの他の次元、310 = 2 * 5 * 31 は良くありません。問題は、(相対的に言えば) 47 と 31 の大きな素数で作業していることです。マスター イメージがどのように見えるかはわかりませんが、470x と 310x しか使用できないと仮定すると、 470x を 480x にスケールアップし、そこからすべての小さな画像を取得することをお勧めします。私の推論は次のとおりです。

画像サイズに対する私のアプローチ

Google は最近 (そうですね、少し前に) ドキュメントをまとめ、 Android 向けの一流のデザイン ガイドを作成しました。特に、 Supporting Multiple Screensについてのページには素敵な小さなグラフィックがあります:

Android密度

この図を次のように要約したいと思います。

  • xdpi : 8 (わかっています、わかっています、「h」をスキップしました。ここではばかげていると思います)
  • hdpi: 6
  • mdpi: 4
  • ldpi: 3

しかし、mdpi を「ベースライン」として使用することについては同意しません。代わりに、すべてのマスター イメージの幅と高さが少なくとも 24 の倍数 (上記の整数の LCM (最小公倍数)) になるように設計します。場合によっては、係数 5 を追加すると、LCM が 120 になります。これが大きすぎる場合は、代わりに 72 を使用することもできます。これは、2 と 3 を組み合わせた素晴らしい数です。

いずれにせよ、私が「ベースライン」を選択するとき、私が選択しているのは、その約数の中に 2 と 3 がいくつかあり、場合によっては 5 である数です。次に、そのベースラインに 2 の累乗、通常は 4 を掛けます。または 8、マスター イメージのサイズを決定します。これにより、デザインのニーズに合わせてさまざまな方法でマスターを縮小できます。ところで、これはAppleなどが物事を決定する方法です。(iPhone の 480 = 2 * 2 * 2 * 2 * 2 * 3 * 5 に気付きましたか? 320 の場合、3 を別の 2 に交換します。)

とにかく、マスター イメージのサイズは 480 で十分です。これは、絶対サイズの点で大まかに収まっているように思われるためです (間違っている場合は訂正してください)。忠実度を損なうものは何でも、スケールダウンするか、Android が縮小するためです。

すべてがあなたの問題に直接対処するわけではありませんが、少しは助けになり、物事をより柔軟な基盤に持ち込むことができると思います.

それが私の最初の考えです:)

LinearLayout でパーセンテージを達成する

私の 2 番目の考えは、いくつかのレイアウトのトリックを実行することです。これは少し単純になり、「等しい国境」の問題により直接対処します。

この疑似 XML に従って編成された LinearLayout を使用します。

<LL width=match height=wrap horizontal>
<View width=0 height=0 weight=.05 invisible/>
<ImageView width=wrap height=wrap src=mycircle/>
<View width=0 height=0 weight=.05 invisible/>
</LL>

非表示のビューはスペーサーとして機能し、その幅は実行時にレイアウト エンジンによって決定され、合計 .05 + .05 = .1 = 画面の幅の 10% になり、円が残りを占めるようになります。 90%。(もちろん、.05 は好きなように調整できます。) Android は適切な ?dpi を選択し、画面サイズの 90% に強制します。上記のさまざまな画像サイズを選択するために費やした努力は、画像が拡大縮小されたときに忠実度に利益をもたらします。

そして、それがあなたの問題への最善のアプローチに関する私の意見です。奇数の 47 と 31 の素数を画像サイズの要素として切り替えて、低い素数 2、3、そしておそらく 5 の複合体である近くの数字 (48 と 32) を優先してから、目に見えないスペーサー ビューを使用して Android のレイアウト エンジンを強制します。

幸運を!

于 2012-06-24T17:47:16.060 に答える
1

リンクとして添付した円の画像がスタイルの選択です。このxmlを使用できます。そして、このドローアブルを相対レイアウトまたはバックグラウンドとして呼び出し、xml で layout:height と layout:width を指定します。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    <gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF" android:angle="270"/>
</shape>
于 2012-06-24T15:50:56.510 に答える
0

この単純なグラフィックには 9 パッチを使用できます。ここでは、9 パッチとは何か、およびその使用方法について非常に適切に説明しています。 http://radleymarx.com/blog/simple-guide-to-9-patch/

于 2012-06-24T14:30:07.657 に答える