갤러리 비스무리한걸 그리드뷰로 만들고 있는데요
스크롤을 넘길때 파일 사이즈가 큰 녀석이 있으면 딜레이 되는 현상이 생기더라구요.
convertView와 ViewHolder도 사용해보았지만 답이 되는거 같지는 않습니다.
아무래도 BitmapFactory.decodeFile에서 오만 리소스를 다 잡아먹는거 같은데요.
이부분을 쓰레드로 돌리면 될것 같긴한데 도저히 감이 안잡혀서요..
아 그리고 Bitmap같은 경우에 recycle을 해야한다고 하는데.
adapter에서 getView나 BindVIew에서 얻어와서 각 뷰에 대응시킨 Bitmap들은 어느부분에서 recycle을 해야하는지도 궁금합니다.
그리고 마지막으로 이미지에 흑백이나 컬러효과를 줄 수 있는 방법이 있는지도 알고 싶구요. ^^
고수님들의 답변을 기다리겠습니다 ^^
좋은 하루 되세요.
지금 제가 돌리고 있는 소스입니다. 핸들러와 쓰레드에 관한 지식이 부족해서 인지 뜻대로 구동되지않네요.
먼저 getview에서
vh.iv.post(new Runnable() {
@Override
public void run() {
Message msg = Message.obtain(imageHandler, position, vh.iv);
imageHandler.sendMessage(msg);
}
});
그리고 핸들러는
Handler imageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = myalbum.getSampleSize(albums.get(msg.what)) + 1;
ImageView iv = (ImageView) msg.obj;
iv.setImageBitmap(BitmapFactory.decodeFile(albums.get(msg.what),
options));
}
};
과 같은 식으로 구동하고 있는데요. 스크롤의 버벅거림은 여전하네요... 어느부분이 잘못된걸까요.. 조언부탁드립니다 ^^
액티비티가 Create되고 난 후 AsynkTask등을 사용하여 비트맵 이미지를 미리 읽어두세요.
getView에서는 미리 읽어둔 Bitmap 배열에서 해당 position의 Bitmap을 바로 setImage시키시면 버벅임 없이 잘됩니다.
훔..저도 예전에 그 부분에서 골머리를 썩었었지요 ..ㅋ
그 부분은 쓰레드로 돌려야됩니다. 먼저 기본 적인 디폴트이미지를 띄우시고 나머지는 쓰레드로 구현하시면 됩니다.
ui쓰레드 부분도 보셔야되고여~