14

ここに画像の説明を入力

上の画像を考えてみましょう。- 点線は、Photoshop ファイルから切り出す 9-Patch png の境界を示します。ポップアップボックスを作成するために必要です。- ボックスには、この写真の測定ツールで示されているように、dropShadow が組み込まれています。- ピンクの線は、draw9Patch ツールを使用して 9-Patch を作成する方法を示しています。

私の質問は次のとおりです。背景に 9 パッチを適用したビュー「コンテナー」がある場合、その子ビューが常に白いボックス内にあることを確認する必要があります。これにはパディングを使用するつもりでした。パディングを測定ツールと等しくなるように設定するつもりでした。したがって、Photoshop で 30px の場合はlayout_paddingLeft"=30dp"、コンテナーに設定します。(設計は MDPI で行われているので、この変換は問題ないと思います)。ただし、異なる密度の画面は 9path をどのように処理しますか。たとえば、測定された領域は30pxまたは30dipになりますか?

4

1 に答える 1

24

ツールを介して、draw9patch以下を定義できます。

ここに画像の説明を入力

  • 垂直方向のストレッチ: 左側の黒いピクセル
  • 水平方向のストレッチ: 上側の黒いピクセル
  • 垂直コンテンツ: 右側の黒いピクセル
  • 水平コンテンツ: 下部の黒いピクセル

ストレッチ ピクセルは連続している必要はないので、特定のスライスをストレッチから除外できます (上のポップアップ矢印を見てください)。同時に、コンテンツがどこに配置されるかについて、右側の紫色の領域を含むプレビューを見るだけで合理的なアイデアを得ることができます。レイアウト:ビューは、 background として設定した 9patch を使用してこれらの値を考慮します

非ストレッチ領域は、ピクセル密度に合わせてスケーリングされます。したがって、上記の 9patch をmdpiアセットとして設定すると、左上のスライスが 50x40 ピクセルの領域 @mdpi と 100x80 ピクセルの領域 @xhdpi にレンダリングされます。左端の伸縮領域は、代わりに dpi に従って幅を配置し、高さはコンテンツに従って配置します。他のストレッチ スライスも同様に機能します。

どちらの場合も、「低解像度」の 9 パッチを扱うと、醜いピクセレーション アーティファクトが発生する可能性があります。考えられる解決策は、サポートされている dpi ごとに異なる 9patch を提供するか、より高いもの (xhdpi) のみを定義して、それに応じて Android がそれらを縮小できるようにすることです。

コンテンツ境界も同様に処理されるdpため、ピクセル密度に従ってスケーリングされます。例: 元の 9patch で 40px@mdpi として定義された左パディングは、80px@xhdpi に変換されるため、コンテンツが指定された境界からはみ出すことはありません。レイアウトのプロパティを介して、9patch で指定されたコンテンツの境界をオーバーライドすることもできることに注意padding*してください。

于 2013-02-20T14:40:34.617 に答える