画像サイズの変更 -スマホの画面に合わせる-

Android

Android端末とiOS端末の一番の違いは何だと思いますか?もちろん見た目や操作方法、開発言語など挙げればきりがありません。アプリ開発の上では機種の多さ(画面サイズの種類)が特徴だと思います。

 

自分で持っているスマホで楽しむだけなら良いですが家族や友達、ゆくゆくはプレイストアでリリースを考えているなら避けては通れないポイントでしょう。

ひよこちゃんの玉入れ大会では以下の流れで画像の大きさを決めています。

  1. ActivityのOnCreateで画面描画のViewを継承したTamaireViewクラスをインスタンス化
  2. TamaireViewのコンストラクタの中で画像のインスタンス化(ここでは元の画像サイズ)
  3. 画面の向きが変わった時などActivityクラスのonWindowFocusChangedが呼び出される
  4. TamaireViewクラスの中に画像サイズ変更のメソッドを用意して、そこで変更(ただし、サイズ変更は共通の手法なので別クラスを用意)

 

public class MainActivity extends AppCompatActivity  {

    private Handler handler = new Handler();
    private TamaireView tamaireView;
    static public Point viewSize = new Point();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        tamaireView = new TamaireView(this);
        setContentView(tamaireView);

        Timer timer = new Timer(false);
        timer.schedule(new TimerTask(){
            public void run(){
                handler.post(new Runnable(){
                    public void run(){
                        tamaireView.invalidate();

                    }
                });
            }
        },0,30);
    }

    @Override
    public void onWindowFocusChanged(boolean isFocus) {
        super.onWindowFocusChanged(isFocus);
        Display display = this.getWindowManager().getDefaultDisplay();
        display.getSize(viewSize);
        tamaireView.resizeBitmap();
    }
}

TamaireViewは説明のためタイトル用の画像、imageTitleに絞っています。

タイトル用画像(title.png)

public class TamaireView extends View {

    static private Bitmap imageTitle;

    TamaireView(Context context){
        super(context);
        Resources resources = this.getContext().getResources();
        imageTitle = BitmapFactory.decodeResource(resources,R.drawable.title);
    }

    public void resizeBitmap(){
        Resources resources = this.getContext().getResources();
        imageTitle = ResizeBitmap.resizeBitmap(BitmapFactory.decodeResource(resources,R.drawable.title), 0.95 );
    }

今後作るアプリでも使えるように画像サイズ変更のクラスにしています。

第1引数 変更する元画像

第2引数 縦横比(縦/横)(要修正)

public final class ResizeBitmap {

    ResizeBitmap(){

    }

    static public Bitmap resizeBitmap(Bitmap bitmapOrignal, double ratio){
        return Bitmap.createScaledBitmap(bitmapOrignal,(int)((double)MainActivity.viewSize.x * ratio ) ,
                (int)((double)MainActivity.viewSize.x * (double)bitmapOrignal.getHeight()* ratio / (double)bitmapOrignal.getWidth()),false);
    }

}

MainActivityの中のonWindowFocusChanged(boolean isFocus)がディスプレイサイズが確定した時点で呼び出されます。

    Display display = this.getWindowManager().getDefaultDisplay();
    display.getSize(viewSize);    //viewSizeはPoint型、つまりx,yの組み合わせ

viewSizeに縦横のピクセル数が入ったらtamaireView.resizeBitmap()でいよいよサイズ変更です。

サイズ変更としていますが、実際は再度Bitmapを作り直します。ゲームのキャラクタでは縦横比が変わると見た目がおかしいのでこのゲームでは横の長さだけで決めています。

最低、以下の解像度で表示確認しましょう。

  • 1,080 x 1,920 例Xperia
  • 1,440 x 2,560 例AquosR
  • 480 x 800 例Nexus One
  • 480 x 854 例Panasonic T50
  • 480 x 960 例Xperia
  • 720 x 1,280 例Xperia

 

タイトルとURLをコピーしました