アプリ作って海外移住

コピペプログラマーのメモ

でかい画像を表示するとき注意 Drawable hdpi xhdpiでエラい違う件

訂正 linerlayout の中にimageviewをいれて常に、full_parentにしておく

画面のい大きさによって、linerlayoutを変える

 

 

小さい画像はhdpiでいいが、

アプリ内で大きい画像を表示するとき、hdpi xhdpi で表示の仕方がかわって

しまう場合がある。

大きい画像を表示するときは、ちゃんと変換してから表示する。

1 drawable をBitmapに変換

2 DisplayMetricsで画面サイズ取得(PX)

3 画像のおおきさを決める。

4 Bitmap.createBitmapで画像リサイズ&トリミング

5 setImageBitmapする。

 

 

String wkpath=target_cattb_path.substring(12-1);
int intid = getResources().getIdentifier(wkpath, "drawable", getPackageName());
Bitmap bmp2 = BitmapFactory.decodeResource(getResources(), intid);

DispActivity_HeaderBmpGet hbg = new DispActivity_HeaderBmpGet();
bmp2 = hbg.hbGetFromRdrawable(this,target_cattb_path,0,bmp2);
iv1.setImageBitmap( bmp2);

 

--------------------------------------------------------

public Bitmap hbGetFromRdrawable(DispActivity activity,
String path, int wwwdegree, Bitmap bmp) {
// TODO 自動生成されたメソッド・スタブ

//Bitmap bmp = null;
int xpx;
int ypx;

// TODO 自動生成されたメソッド・スタブ
// 画面サイズを取得する
// Matrix matrix = new Matrix();
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
xpx = metrics.widthPixels;
ypx = metrics.heightPixels;


int dspXY = Math.min(xpx, ypx);
dspXY = (int)(dspXY *0.95);
////////////////bitmap読み込み 1個なのででかいまんま



///////////////XY取得
int w = bmp.getWidth();
int h = bmp.getHeight();
//////////////////////////////////////画像トリミング
try{
float scale = Math.max((float) dspXY/w, (float) dspXY/h);
int size = Math.min(w, h);
Matrix matrix = new Matrix();

///////////////////リサイズ

matrix.postScale(scale, scale);
//////////////////////////////////中心からsizeの大きさで切り取り
bmp = Bitmap.createBitmap(bmp, (w-size)/2, (h-size)/2, size, size, matrix, true);
}catch (Exception e){
bmp=null;
}
////////////////////////////////////ここまで

//kaitenn
Matrix matrix2 = new Matrix();
matrix2.postRotate( wwwdegree);
bmp= Bitmap.createBitmap( bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix2, true);






return bmp;










}