리스트뷰 쓸 일이 있어서 배경을 drawable에 넣고 지정했는데


그라데이션이 완전 이상하게 나오더군요.


그래서 이렇게 저렇게 해보다가.. 걍 뷰를 하나 만들었습니다. 완전 기초적인 내용이구요.


listview의 경우 RelativeLayout으로 이미지뷰와 리스트뷰를 겹쳐 그렸더니 잘 나오네요.


해당 뷰를 이용하면 이미지 확대/축소시 퀄리티가 현격히 낮아지던 문제가 해결됩니다.

(이상하게 설명해 놓으니 뭔 말인지 모르실듯 싶어서 첨부했음)


보기 안 좋으면 첨부한 소스를 받으세요.


오픈한 것이니 이상하거나 그런 부분은 알아서 커스텀 하시구요~!


import java.io.IOException;

import java.io.InputStream;


import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.Rect;

import android.util.AttributeSet;

import android.util.DisplayMetrics;

import android.view.View;

import android.view.WindowManager;


public class SHARP_IMAGE_VIEW  extends View{

protected Bitmap img;

protected Context cont;

public SHARP_IMAGE_VIEW(Context context){

        super(context);

        cont = context;

    }

public SHARP_IMAGE_VIEW(Context context, AttributeSet attrs) {

super(context, attrs);

cont = context;

}

public void Close(){

img.recycle();

}

public void setImage(int resId){

InputStream is = cont.getResources().openRawResource(resId);

try{

img = BitmapFactory.decodeStream(is);

}

catch(Exception e){ e.printStackTrace(); }

finally {

try {

is.close();

}

catch(IOException e) { e.printStackTrace(); }

}

}

@Override

protected void onMeasure(int width_spec, int height_spec) {

   int width=0,height=0;

   DisplayMetrics displayMetrics = new DisplayMetrics();

WindowManager wm = (WindowManager) 


cont.getSystemService(Context.WINDOW_SERVICE);

wm.getDefaultDisplay().getMetrics(displayMetrics);   

   switch(MeasureSpec.getMode(width_spec)) {

   case MeasureSpec.UNSPECIFIED: width = width_spec;


break;

   case MeasureSpec.AT_MOST:{

    if(img==null) width =


displayMetrics.widthPixels;

    else width =


img.getWidth();

    break;

   }

   case MeasureSpec.EXACTLY: width =


MeasureSpec.getSize(width_spec); break;

   default: break;

   }

   switch(MeasureSpec.getMode(height_spec)) {

   case MeasureSpec.UNSPECIFIED: height =


height_spec; break;

   case MeasureSpec.AT_MOST:{

    if(img==null) height =


displayMetrics.heightPixels;

    else height =


img.getHeight();

    break;

   }

   case MeasureSpec.EXACTLY: height =


MeasureSpec.getSize(height_spec); break;

   default: break;

   }

   setMeasuredDimension(width,height);

}

@Override

    public void draw(Canvas canvas){

    super.draw(canvas);    

    Paint paint = new Paint(3);

Rect dest_rect,src_rect;

if(img!=null){

dest_rect = new Rect(0,0,getWidth(),getHeight


());

    src_rect = new Rect(0,0,img.getWidth(),img.getHeight


());

canvas.drawBitmap(img, src_rect, dest_rect, paint);

}

    }

}


profile