でかい画像を表示するとき注意 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;
}