drawable を vector で定義する
Lolipop から dpi ごとの png ファイルを用意することなく、ひとつの vector ファイルの定義だけでまかなえるようになっていました。
元ネタは Inkscape などを使って自分で作るか、下記 Google サイトなどから svg 形式のファイルを入手します。
https://design.google.com/icons/
svg 形式のファイルから drawable に配置できる xml 形式のファイルへの変換は、下記のサイトで行えます。
変に変換されることがありますので、その場合は適宜修正します。
http://a-student.github.io/SvgToVectorDrawableConverter.Web/
http://inloop.github.io/svg2android/
ただ、この vector で定義した drawable ですが、直接 Bitmap としてリソースから取り出せなかったので、次のようにして取り出す必要がありました。
Bitmap decodeBitmap(int id) {
Drawable d = ContextCompat.getDrawable(getActivity(), id);
return drawableToBitmap(d);
}
Bitmap drawableToBitmap (Drawable drawable) {
/*
http://stackoverflow.com/questions/3035692/how-to-convert-a-drawable-to-a-bitmap
*/
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable)drawable).getBitmap();
}
int width = drawable.getIntrinsicWidth();
width = width > 0 ? width : 1;
int height = drawable.getIntrinsicHeight();
height = height > 0 ? height : 1;
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}