안드로이드에서 일반적인 방법으로 배경화면 이미지를 설정하면,
폰 재부팅시에 이미지가 커지는 현상이 있다.
인터넷에서, 그에대한 해결방법이 딱히 없는거 같다.
그래서, 폰의 해상도에 맞쳐서, 이미지를 리사이징 해서 해결함
h = new Handler()
{
public void handleMessage(Message msg)
{
dialog.dismiss();
Toast.makeText(skin_book_image_activity.this, "배경화면으로 설정하였습니다", Toast.LENGTH_SHORT).show();
}
};
Thread t = new Thread
(
new Runnable()
{
@Override public void run()
{
skin_book_image_activity.this.runOnUiThread
(
new Runnable()
{
@Override public void run()
{
dialog = ProgressDialog.show(skin_book_image_activity.this, "", "배경화면 설정중...", true);
dialog.show();
}
}
);
String s = aryImage.get(iCurrentImageIndex);
Point p = lib_image.getImageSizeFromFile(sImageDir + "/" + s.split(":")[1]);
try
{
Bitmap b = BitmapFactory.decodeFile(sImageDir + "/" + s.split(":")[1]);
WallpaperManager wpm = WallpaperManager.getInstance(skin_book_image_activity.this);
Point p1 = new Point(wpm.getDesiredMinimumWidth(), wpm.getDesiredMinimumHeight());
Bitmap bitmapWallpaper = Bitmap.createBitmap(p1.x, p1.y, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWallpaper);
double iScaleFactor = 0.0;
if(p1.x > p.x || p1.y > p.y)
{
double scale_x = p.x > p1.x ? (p.x*1.0)/(p1.x*1.0) : (p1.x*1.0)/(p.x*1.0);
double scale_y = p.y > p1.y ? (p.y*1.0)/(p1.y*1.0) : (p1.y*1.0)/(p.y*1.0);
iScaleFactor = Math.min(scale_x, scale_y);
}
else
{
double scale_x = p.x < p1.x ? (p.x*1.0)/(p1.x*1.0) : (p1.x*1.0)/(p.x*1.0);
double scale_y = p.y < p1.y ? (p.y*1.0)/(p1.y*1.0) : (p1.y*1.0)/(p.y*1.0);
iScaleFactor = Math.min(scale_x, scale_y);
}
double post_t_x = post_t_x = (p1.x/2.0) - (b.getWidth()/2.0*iScaleFactor);
double post_t_y = 0.0;
//lib_common.Log("*** post_t_x=["+post_t_x+"] post_t_y=["+post_t_y+"]");
Matrix matrix = new Matrix();
matrix.postScale((float)iScaleFactor, (float)iScaleFactor);
matrix.postTranslate((float)post_t_x, 0);
canvas.drawBitmap(b, matrix, null);
wpm.setBitmap(bitmapWallpaper);
}
catch(IOException exp)
{
lib_common.Log("*** SKIN_BOOK_IMAGE_ACTIVITY... "+exp.toString());
}
h.sendEmptyMessage(0);
}
}
);
t.start();
//----------------------------------------------------------------------------
// 이미지의 해상도 얻어오기 (이미지를 메모리에 로드하지 않고)
//----------------------------------------------------------------------------
public static Point getImageSizeFromFile(String sImagePath)
{
Point p = new Point();
BitmapFactory.Options bfOptions = new BitmapFactory.Options();
bfOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(sImagePath, bfOptions);
p.x = bfOptions.outWidth;
p.y = bfOptions.outHeight;
//String sImageType = bfOptions.outMimeType;
lib_common.Log("w=[" + p.x + "] h=[" + p.y + "]");
return p;
}
'Android 초보' 카테고리의 다른 글
안드로이드, 배경화면 이미지. 버그 수정 (0) | 2014.12.16 |
---|---|
adb shell run-as (0) | 2014.12.12 |
안드로이드, runOnUiThread, 배경화면설정 (0) | 2014.07.04 |
HttpURLConnection getInputStream FileNotFoundException (0) | 2014.07.04 |
GCM. 발송서버. php (0) | 2014.07.04 |