티스토리 뷰

 
안드로이드OS의 앱에서 그라데이션이 적용된 이미지를 background로 쓸경우
단말기에 따라 차이는 있지만 일부 이미지에 줄이가는 등의 깨짐현상이 발생한다.
이럴경우 XML에서 바로 적용할 것이 아니라, 소스에서 InputStream으로 읽어와
background를 적용시키는 방법을 이용하면 완전히는 아니지만 어느정도
이미지깨짐을 방지 할 수 있다.
이미지가 한두개라면 그 자리에서 바로 적용하면 되겠지만..
안드로이드의 특성상 수많은 이미지를 사용하므로.. 다음처럼 메소드를 만들어
처리해주어 재사용하면 좋다.


방법1.

//아래의 메소드로 Activity 와 drawable의 id를 입력받아 InputStream처리후 drawable를 리턴해서
//(class명은 backgroundMgr이라 가정)
 public static BitmapDrawable getDrawable(Activity activity, int resid)
 {
  InputStream is = activity.getApplicationContext().getResources().openRawResource(resid);
  BitmapDrawable bd = new BitmapDrawable(is);
  return bd;
 }

//아래처럼 drawable을 받아서 Layout에 이미지를 적용시키는 방법.
//drawable을 받으면 같은 이미지일경우 소스내에서 재사용 할 수도있고.
//조건에따라 같은 Layout id 에 여러 drawable을 적용시키기가 수월하다.
private BitmapDrawable myDrawable;
myDrawable = backgroundMgr.getDrawable(this, R.drawable.my_image);

myButton= (Button) findViewById(R.id.my_button);
myButton.setBackgroundDrawable(myDrawable );



방법2.

//메소드가 뷰까지 받아서..바로적용.
//(class명은 backgroundMgr이라 가정)
public static void backImg(Activity activity, View view, int resid){
    InputStream is = activity.getApplicationContext().getResources().openRawResource(resid);
    BitmapDrawable bd= new BitmapDrawable(is);
   view.setBackgroundDrawable(bd);
}

//아래처럼 Activity, Layout id, drawable id를 한번에 전달한다.
backgroundMgr.backImg(this, findViewById(R.id.my_button), R.drawable.my_image);



[출처] http://devbible.tistory.com/admin/
[원본 ] http://devbible.tistory.com/admin/31
[작성자] wdevbible.tistory.com


댓글