コンテンツの画面サイズ

1,390 views
Skip to first unread message

名 姓

unread,
Dec 10, 2010, 4:50:43 PM12/10/10
to 日本Androidの会
Androidでコンテンツを制作する時、
画面サイズ(幅、高さのピクセル数)は、どのサイズを前提に制作すればいいのでしょうか。

ゲームのような、表示する画像(キャラクター)などのサイズ(幅、高さのピクセル数)が、あらかじめ決まっている場合、
必然的に画面全体のサイズ(幅、高さのピクセル数)も固定になります。

例えば、画面サイズ、幅320x高さ480pxの端末機を前提に制作したコンテンツを、
画面サイズ、幅480x高さ800pxの端末機で表示すると、
コンテンツが左上に寄ってしまい、右側と、下側が空いてしまいます。

よろしくお願いいたします。

岡村

unread,
Dec 13, 2010, 6:04:33 AM12/13/10
to 日本Androidの会
はじめまして、岡村と申します。

> 例えば、画面サイズ、幅320x高さ480pxの端末機を前提に制作したコンテンツを、
> 画面サイズ、幅480x高さ800pxの端末機で表示すると、
> コンテンツが左上に寄ってしまい、右側と、下側が空いてしまいます。

同じ問題にぶつかって試行錯誤した結果を書き込みます。
もっといい方法があればご教授願いたいです。

私の場合画像サイズを640*960のサイズを用意し(Is03サイズ)
縮小して表示しています、メモリの問題などありますが、読み込みのタイミングなどを考えれば何とかなりました。

manifestで回転しないようにしlayoutで横幅いっぱいにfitさせて縦方向はセンター寄せしています。
そうすると・・・

長くなるのでBlogに書いておきました.

こんな下手っぴな文章ですが手助けになればと思います。

http://unizain.com/masa/?p=138

名 姓

unread,
Dec 13, 2010, 8:31:36 AM12/13/10
to 日本Androidの会
岡村さん ありがとうございました。

Canvasに、座標を指定して描画するコンテンツの場合はどのようにすればいいのでしょうか?
例えば、このゲーム↓を、画面サイズの大きい端末機で表示すると、どのように表示されるのでしょうか?
http://andronavi.com/2010/04/15759

Windowsでは、ディスプレイの解像度を切り替えることができますが、
Androidでは、同様の機能があるのでしょうか?

Jack

unread,
Dec 13, 2010, 9:29:06 AM12/13/10
to 日本Androidの会
名 姓 さん

Jackといいます。

参考になるか解らないのですが、pxではなくpsで表示しては、どうでしょうか。
アニメではないのですが、psで表示するとHTC-03A(Android1.6)で作成したアプリが
IS03(Android2.1-update1)でサイズ調整されて表示されます。

もしかしたらアニメがボケるかもしれませんがやってみる価値あるのでは?!

psは、解像度に合わせて非常してくれるので。

micco

unread,
Dec 13, 2010, 11:02:27 AM12/13/10
to 日本Androidの会
こんばんは。
miccoです。

私も悩んで何度か投稿したことがありますが、ほとんどコメントが付きませんでした。。。
結局、drawable-hdpi、drawable-mdpi、drawable-ldpiに画面密度に応じた画像を作成し、
画面密度を取得して、表示位置やタッチの座標を補正して扱う方法を採用しました。
ただ、同じ画面密度でも縦横比率が違うため、hdpiは、ワイドVGAではなく、VGAを想定
して640px×480pxをゲーム画面として制作しました。
この方法は苦肉の策ですので、もっと効率的でシンプルな方法が無いか模索していると
ころです。

岡村さんのブログを拝見しました。
============
android:adjustviewbounds=”true” は、画像を縦横比維持したまま拡大するかどうか、
android:scaletype=”fitXY” で画面にfitさせています。
============
これが独自View(SurfaceViewを承継)でも有効なら便利ですが、どうなのでしょう?
タッチ座標等の位置補正は必要になるとは思いますが、これが使えるなら、色々な密度、
縦横比の端末に効率的に対応できそうです。
使えないなら、どうやってうまくフィットさせれば良いか正攻法が知りたいところです。
OpenGLを勉強すれば簡単に対応できるのかもしれませんが。。。


On 12月13日, 午後10:31, 名 姓 <ytk...@gmail.com> wrote:

岡村

unread,
Dec 13, 2010, 12:29:52 PM12/13/10
to 日本Androidの会

> Canvasに、座標を指定して描画するコンテンツの場合はどのようにすればいいのでしょうか?
> 例えば、このゲーム↓を、画面サイズの大きい端末機で表示すると、どのように表示されるのでしょうか?http://andronavi.com/2010/04/15759

岡村です

遅くなってしまい申し訳ないです。
そうなんです!!この場合だと指定した座標にボタンを置くことがとても面倒臭いことになってしまいます…

だから私は、ボタンひとつでも透過の640x960pxで作って重ねています。
そうすることで、同じように伸縮されるためズレがないです!!

岡村

unread,
Dec 13, 2010, 12:46:01 PM12/13/10
to 日本Androidの会
jackさん

はじめまして、岡村と申します。

psはフォントサイズに依存するのでユーザー側が大きいサイズのフォント指定した場合はみ出たりしたりは
ないのでしょうか?
psやdipはいろいろな方に教えていただきましてためしてみましたが、
ゲームなどの制作の背景画像においてはfitさせてしまったほうが早いと思いまして...
dipやspで指定するのとfitさせてしまうのはどちらのほうが描画が早いのでしょうかね?

dipやspでの表示で一度ためしてみたいと思います!!

岡村

unread,
Dec 13, 2010, 1:05:46 PM12/13/10
to 日本Androidの会
miccoさん

はじめまして!
岡村です

> 私も悩んで何度か投稿したことがありますが、ほとんどコメントが付きませんでした。。。
私も何度か投稿しました...w投稿されている方が結構いらっしゃったので、blogにまとめました♪

> 結局、drawable-hdpi、drawable-mdpi、drawable-ldpiに画面密度に応じた画像を作成し、
> 画面密度を取得して、表示位置やタッチの座標を補正して扱う方法を採用しました。
同じ方法でやっていますが、iPhoneアプリ開発にくらべデザイナーさんやプログラマーに負担が大きいです・・・

> ただ、同じ画面密度でも縦横比率が違うため、hdpiは、ワイドVGAではなく、VGAを想定
> して640px×480pxをゲーム画面として制作しました。
> この方法は苦肉の策ですので、もっと効率的でシンプルな方法が無いか模索していると
> ころです。
マーケットのアップデートでマーケット上で解像度でフィルタできるようになったため、端末を絞ることは楽になりそうですね・・・
画面サイズが大きい物を縮小して表示する際にIS01などのメモリのあまり多くない端末では苦しいです。

> 岡村さんのブログを拝見しました。
> ============
> android:adjustviewbounds=”true” は、画像を縦横比維持したまま拡大するかどうか、
> android:scaletype=”fitXY” で画面にfitさせています。
> ============
> これが独自View(SurfaceViewを承継)でも有効なら便利ですが、どうなのでしょう?
> タッチ座標等の位置補正は必要になるとは思いますが、これが使えるなら、色々な密度、
> 縦横比の端末に効率的に対応できそうです。
SurfaceViewにはadjustviewbounds、scaletypeはないんです...
プログラム側から動的に変更してしまうのが一番良い方法だと考えられます・・・
WindowManager wm = getWindowManager();
Display d = wm.getDefaultDisplay();/*画面解像度の取得*/
などで、画面サイズを取得してfitさせる方法しか思いつかないです。お役に立てずにすいません...

> 使えないなら、どうやってうまくフィットさせれば良いか正攻法が知りたいところです。
> OpenGLを勉強すれば簡単に対応できるのかもしれませんが。。。
OpenGLは全く無知ですw現在私も勉強中です!
ゲームなどの画面描画などにはやっぱりOpenGLのほうがいいのでしょうかね?
また、ゲームエンジンなどもおすすめのものなどあればご教授願いたいものです...

Jack

unread,
Dec 14, 2010, 10:28:31 AM12/14/10
to 日本Androidの会
名姓さん

Jackです。

皆さんの考えもなるほどと思い、数少ないHTC-03Aで作ったゲームアプリをIS03で動かしてみました。
左下にまとまって小さくなってしまいました。このアプリは、Canvasで絶対アドレスを指定しているので無理からぬところです。
ゲームソフトは、ツール系と違い、私のイージーな考え方では、だめだったようです。失礼しました。
やはり、機器毎に画面の大きさに合わせて作るしかないのかな?

私のアプリも皆さんの意見参考にして直します。

松岡 謙治

unread,
Dec 14, 2010, 11:17:43 AM12/14/10
to android-g...@googlegroups.com
松岡です。

画面サイズについてはPCが参考になりませんか?
PCの場合解像度が変わるのは当たり前なので、
一枚絵の場合画面中央に表示してその周りはブラックアウトか繰り返しパターン
それ以外の場合は画面サイズに応じて動的に画面を生成し情報量を変えていると
思います。
ゲームだけでなくWebサイトとかのデザインも参考になるかと思います。

丹羽直也(MineStudio)

unread,
Dec 14, 2010, 11:27:16 AM12/14/10
to android-g...@googlegroups.com
こんにちは、丹羽@神戸です

便乗する形になってしまいますが、僕はViewを使ったものは、Webデザイン、OpenGL ESは一般的なゲーム開発(DirectX等)に例えて考えてます。
Webでは幅とかが変わった時に、それに追従するリキッドレイアウトや、幅を固定してしまって、はみ出たときは無理に縮めるとか、いろいろなノウハウがありますが、これは、ほぼそのままAndroidに流用できると思ってます。
こう考えると、WebでのDOM操作っていうのは、Androidでの動的レイアウトですし、こう考えるとAndroidそのものがブラウザにみえてきます

また、DirectXの場合はバババと画面のサイズやアスペクト比を求めて、描画するものはサイズを大きめにとって、はみ出させて、アスペクト比の差を埋めちゃいます。

ただ、どちらもメモリが少ないっていう点で、パソコンでのノウハウをそのまま移植するとメモリ足りなくなっちゃうのが難点ですが、そこは工夫次第だと思います
(僕もDirectXをOpenGL ESに移植しようとしたら、速攻メモリ足りなくなりました・・・w荒使いしすぎでしたw)

ですので、サイズを前提とするよりも、プログラムの設計そのものを動的に対応できるようにしないといけないなとは思います。

http://developer.android.com/guide/topics/resources/providing-resources.html
なお、リソースマネージャでかなり制御できるので、Viewを使う場合、これに合わせて、レイアウトをつくっていくという手がベストだとは思います。

2010年12月15日1:17 松岡 謙治 <e...@firespeed.org>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

Jack

unread,
Dec 15, 2010, 8:04:05 AM12/15/10
to 日本Androidの会
松岡さん

Jackといいます。

気がつかなかったですね。そういえば、Androidも左上をX,Yで決めて各軸方向に伸ばしているので、
基準画面の大きさ、例えば320X480を基準として、起動時にgetWidth()とgetHeight()を求めて
元から何%大きくなったかで描くCanvasを決めてあげれば確かに全体としてはうまくいくかも。

でも、アニメをどうするかですね。でもこれはこれは、最初から3種類程度作っておけばいいかも。
アニメのX,Yを変えるだけだから、あまり労力使わないし。

初期処理時の設定が面倒ですが、ロジックに影響ないのでうまくいきそうな。

いかがでしょう?!
> >> また、ゲームエンジンなどもおすすめのものなどあればご教授願いたいものです...- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

micco

unread,
Dec 15, 2010, 9:09:25 AM12/15/10
to 日本Androidの会
こんばんは。
miccoです。

> 基準画面の大きさ、例えば320X480を基準として、起動時にgetWidth()とgetHeight()を求めて
> 元から何%大きくなったかで描くCanvasを決めてあげれば確かに全体としてはうまくいくかも。

最初この方法でやっていましたが、何となくピクセル密度でスケーリングするのがAndroidのお作
法なのかなと思って、そっちに方向転換しました。
ただ、ギャラクシータブは、たしかFWVGAながらmdpiだったりするかと思いますので、HVGAを
基準に作ってあるmdpiの画像が取得されているなら、小さく表示されているはずです(未確認)。
また、IS03も試していませんが、hdpiの画像は、あくまでVGAを基準に作ってあるので、たぶん
960×640の画面だと小さく表示されているのではないかと想像しています。
そういう観点からすると、hdpi/mdpi/ldpiで画像を用意してシステムのピクセル密度に任せるとい
う方法は、あまり良い方法ではないと思っています。
やはり、getWidth()やgetHeight()で画面サイズを取得して、サイズに応じて画像を拡大縮小して
表示する方が理想の状態に近づけると思います。
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

岡村

unread,
Dec 15, 2010, 11:00:16 AM12/15/10
to 日本Androidの会
こんばんは岡村です。

そうですね,現状はjackさんの仰っている方法をとっています,
しかし,描画前に一度計算を行うので,そのワンステップをどうにか取り除きたいと願って模索中です。

そうしてたどり着いたのが現状blogに掲載した方法ですね♪
fitXYしても内部的には計算しているんだろうけども...w
Reply all
Reply to author
Forward
0 new messages