Androidでの単位変換系の覚書メモ
はじめに
毎回ググることが多いのでまとめメモを作っておく(あとで追記予定)
Latlng => Locationの変換
地図系のアプリを使っているとたまに必要になる
LatLng TOKYO = new LatLng(35.691, 139.693); Location location = new Location(LocationManager.GPS_PROVIDER); location.setLatitude(TOKYO.latitude); location.setLongitude(TOKYO.longitude);
最後の位置情報をPrefrenceに保存するケース
NWが不順/オフラインな時、
- GoogleAPIClientに接続できない
- 現在地取得ができない
- 一番最後の位置にとりあえず移動したい*1
な場合が多いのですが、
double型は保存できないので工夫しなさいよという話
byte[]<=>Bitmap置換
//byte[] => Bitmap Bitmap bmp = null; byte[] bytes = xxx; //ここに画像データが入っているものとする if (bytes != null) { bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); } //Bitmap =>byte[] ByteArrayOutputStream baos = new ByteArrayOutputStream(); bmp.compress(CompressFormat.PNG, 100, baos); byte[] bytes = baos.toByteArray();
Drawable<=>Bitmap置換
//drawable => Bitmap Bitmap bmp = ((BitmapDrawable) drawable).getBitmap(); //Bitmap =>drawable Drawable drawable = new BitmapDrawable(bmp);
- 9-patchの場合は
public Bitmap loadBitmap(Drawable drawable) { int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); return loadBitmap(drawable, width, height); } public Bitmap loadBitmap(Drawable drawable, int width, int height) { Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);//★ Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, width, height); drawable.draw(canvas); return bitmap; }
OpenGLとかで使う場合は、ARGB_8888が普通っぽいけど、javaベースならARGB_4444で十分かもしれない
でもまあ 9-patchの画像 自体提供されることが少なくなっている気がしますね*2
そもそも9-patchの画像の作り方を知らないデザイナーさんが未だにお多い。*3
下記みたいにプログラマーが用意するべきものみたいな認識があるかも*4
まあ tools 25.3.0 から draw9patch は廃止されていたりするので、今後廃れていくフォーマットなのかもしれない・・
WebP対応に関して思うこと
WebPとかも iOS側で使ってくれないとデザイナーさんの素材作成的にサポートされない予感がする・・*5
Viewのキャプチャ
- 単純なImageView
Bitmap bmp = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
- 普通のViewなら
public Bitmap getViewCapture(View view) { view.setDrawingCacheEnabled(true); // Viewのキャッシュを取得 Bitmap cache = view.getDrawingCache(); if(cache==null) return null; Bitmap screenShot = Bitmap.createBitmap(cache); view.setDrawingCacheEnabled(false); return screenShot; }
でもこれやりたいときって一番下のrootView(RelativeLayout)とかでやりたいわけだけど、うまく取れなかったりするんですよね・・仕方ないのかもしれませんが・・
関連
でAndroid5からは
MediaProjection API を使え という流れみたい
一応下記のフラグで黒画面表示でスクショブロックできるらしいが。。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
でこの機能を使ったソフトの話が下記に繋がると。
配列参照系
某所の参照引用なんですが、そのサイトの記載が微妙に間違っていて
そのままコピペ=>コンパイルエラーを繰り返しているので(苦笑
文字列配列
<string-array name="sample_names"> <item>foo</item> <item>bar</item> <item>baz</item> </string-array>
String[] names = getResources().getStringArray(R.array.sample_names);
int配列
<integer-array name="sample_ids"> <item>1</item> <item>2</item> <item>3</item> </integer-array>
int[] ids = getResources().getIntegerArray(R.array.sample_ids);
その他配列系
<array name="sample_images"> <item>@drawable/title</item> <item>@drawable/logo</item> <item>@drawable/icon</item> </array> <array name="sample_colors"> <item>#FFFF0000</item> <item>#FF00FF00</item> <item>#FF0000FF</item> </array>
TypedArray images = getResources().obtainTypedArray(R.array.sample_images); Drawable drawable = images.getDrawable(0); //Drawable配列 TypedArray colors = getResources().obtainTypedArray(R.array.sample_colors); int color = colors.getColor(0); //Color配列
独自のMap配列
使ってみてちょっと便利でした。
最近のAndroid Studio 2.4 Preview2 君
android界の有名な方が、release noteを呟くとRTがブクマツイートが ガンガン飛んでくる感じだったりしますが
皆さんさわってないんだろうなーというのが正直な感想・・
署名の件は調べたら OS7用の v2署名の話だったらしい。まあ OS7使ってないから確かに影響がわからんわな・・(苦笑
android studio 2.4 preview2
— close_yutori (@kimukou2628) 2017年3月17日
layout previewの日本語豆腐のまま
evalは復活(local変数みれるようになった)
値のホバー復活
android studio 2.4 preview2
— close_yutori (@kimukou2628) 2017年3月17日
databinding利用時のguavaのdependenceが必要な問題<=治らず
release noteには署名問題解決したよ?しか書いてないしな
android studio 2.4 preview2
— close_yutori (@kimukou2628) 2017年3月17日
logcat view(新規分離?)
絵文字もでるようになったのね
duplicate resousce=>未解決
android studio 2.4 preview2
— close_yutori (@kimukou2628) 2017年3月17日
device exploler
どこにadb pullしてるかと思ったら$home/androidStudio/deviceExploler/端末ID/pull対象のファイルディレクトリ/対象ファイル ですか。(-ω-)
ステップデバック時にローカル値参照やevalが使えない件は、一見治ったようには見えるんだけど
InstantRunを2回目以降すると、ローカル値参照やevalができなくなる。preview3以降をお待ちしております状態かな