0

画面の下部から半分離れており、ユーザーがアクションを実行するとアニメーション化 (回転) する糸車のグラフィックが必要です。

次のように呼び出して、ホイール グラフィックを画面外に配置できます。

    Animation animation = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE, 0,Animation.ABSOLUTE,wheelPos, Animation.ABSOLUTE, wheelPos);
    animation.setDuration(1);
    animation.setFillAfter(true);
    wheel.startAnimation(animation);

LayoutParams を使用して幅を任意に設定できます。

しかし、異なる画面サイズでホイールを同じサイズにするにはどうすればよいですか? たとえば、上の画面 (wheelPos 変数) からホイールの Y ピクセルを離す必要がありますが、Nexus S と Nexus 7 では適切な Y 値を計算するにはどうすればよいでしょうか?

同じことが幅にも当てはまります。正確に同じサイズに見えるように幅を計算するにはどうすればよいですか?

Catch Android アプリhttps://catch.com/に注意してください- ホイール メニューを展開すると、Nexus S と Nexus 7 でサイズが同じになります - どうやってそれを達成したのでしょうか?

4

1 に答える 1

2

Catch の開発者はこちら。ここであなたの質問に私たちを指摘する電子メールをありがとう.

dpホイール メニューの場合、その幅と位置は/ dip(密度に依存しないピクセル)を使用して XML レイアウト ファイル内で指定されます。特定のサイズ (たとえば、300dp) の場合、どの Android デバイスでも同じサイズで表示されます。システムは、デバイスの画面の密度が低、中、高、高などに応じてその値を調整します。

したがって、使用して幅と Y オフセットを設定すると、準備完了dpです。必要に応じて、完全にプログラムで実行できます。

final int wheelWidth = 300;
final int wheelYoffset = 64;

DisplayMetrics dm = getResources().getDisplayMetrics();

final float scaledWheelWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wheelWidth, dm);
final float scaledWheelYoffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wheelYoffset, dm);

個人的には、すべての UI ディメンションをリソースとして維持する方がはるかに簡単だと思います。res/values/dimens.xml私は追加します:

<dimen name="wheel_width">300dp</dimen>
<dimen name="wheel_y_offset">64dp</dimen>

コードでこれらのディメンションを使用する必要がある場合は、ワンライナーでそれらを取得できます。

final float scaledWheelWidth = getResources().getDimensionPixelSize(R.dimen.wheel_width);
final float scaledWheelYoffset = getResources().getDimensionPixelOffset(R.dimen.wheel_y_offset);

レイアウトに使用dpすることは、さまざまなデバイスにうまくスケーリングする Android UI を作成するための重要な原則の 1 つであり、開発中にヒット ターゲットのサイズを設定できるため、ユーザーが触れたり操作したりすることが予想されるものにとって特に重要です。アプリが実行されているデバイスに関係なく、物理的に同じサイズになります。

于 2013-01-03T20:40:16.223 に答える