안드로이드에서 일반적인 방법으로 배경화면 이미지를 설정하면,
폰 재부팅시에 이미지가 커지는 현상이 있다.
인터넷에서, 그에대한 해결방법이 딱히 없는거 같다.
그래서, 폰의 해상도에 맞쳐서, 이미지를 리사이징 해서 해결함

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;
  }

반응형
Posted by 돌비
,