<< Android-Note
画像をdpiに応じてリサイズする方法
dpiとは1インチ(2.54cm)平方当たりのドット数を表したものです。
このdpiにはhdpiやxdpiなどのおおまかな区分があり、現在(2015年)では次の5つのdpiがあります。
dpiの名前 | dpiの値 |
---|---|
ldpi | 120(dpi) |
mdpi | 160(dpi) |
hdpi | 240(dpi) |
xhdpi | 320(dpi) |
xxhdpi | 480(dpi) |
端末でこのようなdpiの種類をコードから取得してそれに応じて画像サイズを変える例が次のコードです。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DisplayMetrics dm = new DisplayMetrics(); ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm); int dpi = dm.densityDpi; //dpiの大きさを取得 ImageView imageView = (ImageView) findViewByID(R.id.image_view); Bimap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); image.setDensity(dpi); //dpiの値に応じて画像リサイズ imageView.setImageBitmap(bitmap); } }
DisplayMetricsクラスのdensityDpiメンバを調べればその端末のdpiの種類を知ることができます。
その後BitmapクラスのsetDensityメソッドに調べたdpiの数値を渡せば適切に画像をリサイズしてくれます。
ただしこのような方法を使うのはダウンロードした画像などに利用するのが適しています。リソースに組み込まれている画像は端末に応じたdpiごとに自動でリサイズされるのでこのような処理を行う必要はありません。
© Kaz