2011年03月28日

[Android] 画像の等倍表示

数日間悩みました。解像度に関係なく、画像の1ドットを画面の1ドットとして表示させる方法がなかなかわからなくて。

インターネットを調べると、「res/drawable-nodpiの下に画像を入れれば良い」という情報は見つかったのですが、そのようにしても解像度に応じて自動的に拡大/縮小されてしまいます。
ApiDemoを動かして、drawable-nodpiの表示され方も確認しましたが、これでも拡大/縮小されているようなので、この方法は違うんだろな、と思って別の方法を探していました。

やりたかったのは、ドットをきれいに表示させたかっただけなのです。
まさかこんなに苦労するとは思いませんでした。

最初に思いついたのは、解像度ごとに同じ大きさの画像を用意することです。
drawable-hdpi/mdpi/ldpiのそれぞれに、まったく同じ画像を入れました。すごく無駄だとは思いながら。
結果は、変わりませんでした。
どういう仕組みになっているのか、hdpiの画像が正しく表示されません。

このときの表示方法がDrawableを継承したクラスで自前で描画していたので、それが影響しているのかとも考えました。
標準のImageViewに表示させてみましたが、こちらも変わりませんでした。
解像度別に画象を用意する方法と、ndpiに画象を入れる方法、どちらも試しましたが全然ダメでした。

前々から気にはしていたのですが、デフォルトの設定で大丈夫だろうと思っていた設定項目がありました。
それがマニフェストののanyDensity属性です。
このあたりが表示方法に影響してくることは知っていたのですが、デフォルトが正しいと何故か思い込んでいて、このあたりを変えようとは思っていませんでした。
が、やることもなくなったので、今朝試してみたところ…あっさり希望通りの表示になりました。
具体的にはres/drawable-ndpiの中にだけ画象を置いて、上記anyDensityをtrueにしただけです。
すごく時間を無駄にした気分です。

しかし、これでようやく先に進めます。
震災後、あまり趣味の開発にも時間をあてられていなかったので、少しずつ再開していこうかと思います。
タグ:android Drawable
posted by t2low at 08:53| Android