8

私の Android アプリ (テキストベースのゲーム) では、視覚的な雰囲気を良くするために背景画像を多用しています。たとえば、ゲーム内のアクションで居酒屋に行く場合、ゲーム内の居酒屋の背景画像が表示されます。これは、他の方法では得られる退屈な黒い背景に比べて、グラフィカルに大幅に改善されています。

ただし、android:background は常に画面のサイズに拡大されるため、これも問題です。その結果、プレイヤーが縦向きモードと横向きモードを切り替えると、背景画像の見栄えが非常に悪くなります。さらに悪いことに、多くのデバイスは縦横比が大きく異なり (320x480 mdpi、480x800 hdpi、480x852 hdpi など)、さらにバリエーションが増えています。

他の人はこの問題をどのように解決しますか? 主な解像度/方向に個別の画像を用意することは、apk が大きくなりすぎるため、私にとっては選択肢ではありません。

4

3 に答える 3

5

最初のステップは、デバイス自体の画面の高さと幅を取得し、必要に応じてビットマップを拡大/縮小またはパディングすることです。このSOの回答には、役立つはずのソースがあり、以下にコピーされています。元の回答については、ジョセフに感謝します。

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

オリエンテーションの取得に関する一般的なソースを次に示します。

int orientation = display.getOrientation(); 

または、ここからのより複雑なソース(少し面倒ですが、正しいように見えます)。

public int getscrOrientation()
{
  Display getOrient = getWindowManager().getDefaultDisplay();

  int orientation = getOrient.getOrientation();

  // Sometimes you may get undefined orientation Value is 0
  // simple logic solves the problem compare the screen
  // X,Y Co-ordinates and determine the Orientation in such cases
  if(orientation==Configuration.ORIENTATION_UNDEFINED){

      Configuration config = getResources().getConfiguration();
      orientation = config.orientation;

      if(orientation==Configuration.ORIENTATION_UNDEFINED){
        //if height and widht of screen are equal then
        // it is square orientation
            if(getOrient.getWidth()==getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_SQUARE;
            }else{ //if widht is less than height than it is portrait

                if(getOrient.getWidth() < getOrient.getHeight()){
                orientation = Configuration.ORIENTATION_PORTRAIT;
                }else{ // if it is not any of the above it will defineitly be landscape
                orientation = Configuration.ORIENTATION_LANDSCAPE;
                }
            }
       }
  }
  return orientation; // return value 1 is portrait and 2 is Landscape Mode
}
于 2010-09-03T12:30:44.617 に答える
2

背景画像を画像として作成して、NinePatchそれがどのように伸びるかをより適切に制御できるようにすることはできますか?

それ以外の場合は、 scaleType属性を設定することで、画像が伸びるのを防ぐ (または少なくとも正しい縦横比を維持する) ことができますandroid:scaleType="center"

于 2010-09-03T12:30:39.430 に答える
2

現在のビューの幅と高さを取得することをお勧めします。現在、どの関数がこれらの値を提供するかはわかりませんが、可能であると確信しています。これで、縦横比を計算できます。アスペクト比が間違っていないように、画像を 1000x1000 のようなものにして、画像の特定の部分だけを表示します。
カメラにも同じ問題があります。したがって、私の解決策は、幅または高さの2つの値のいずれかを固定として選択し、アスペクト比に従って正しい他の値を計算することでした。画像の一部だけを表示する関数が既にあるかどうかはわかりませんが、画像の一部だけをコピーしてその部分を表示する何かを書くことができると確信しています。

欠点はもちろん、背景の一部しか表示されないことです。ただし、携帯電話の一般的な縦横比は 1:1.3 から 1:1.8 の間なので、それほど大きな問題にはならないと思います。私は、醜い引き伸ばされた画像を見るよりも、画像の一部を正しい方法で見たいと思っています。

于 2010-09-03T11:50:09.010 に答える