MediaStore를 이용하여 비디오 목록과 썸네일을 리스트뷰를 이용하여 보여주고 있습니다. UI스레드에서 이미지 처리를 하다보니 스크롤시 지연현상이 나타납니다.
그래서 AsyncTask를 이용하여 이미지 처리를 해주고자 했는데... 계속 실패하고 말았습니다. 그래서 이렇게 도움을 요청하고자 합니다.
public class VideoData {
public int VideoId;
.
.
.
}
public VideoData(){
VideoId = 0;
.
.
.
}
public int getVideoId(){
return this.getVideoId()
}
.
.
.
-----------------------------------------------------------------------
private ArrayList<VideoData> getVideoList() {
ArrayList<VideoData> getVideoList = new ArrayList{
String[] proj = { MediaStore.Video.Media._ID
.
.
.
};
if (videocursor != null && videocursor.moveToFirst()) {
int id = videocursor.getColumnIndex(MediaStore.Video.Media._ID);
.
.
.
VideoData mVideoList = new VideoData();
mVideoList.VideoId = videocursor.getInt(id);
.
.
.
getVideoList.add(mVideoList);
mVideoList = null;
} while (videocursor.moveToNext());
}
return getVideoList
// 생략
}
}
}
// 생략된 {, }도 있습니다.
// ArrayAdapter를 통해 ArrayList와 연결해주고 있습니다.
private ArrayList<VideoData> items;
.
.
.
public View getView(int position, View convertView, ViewGroup parent){
View v = covertView
ViewHolder viewHolder;
if (v == null){
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(resc, null);
VideoData item = items.get(position);
if (item != null) {
//편의상 이미지만 넣었습니다.
viewHolder = new ViewHolder();
viewHolder.img = (ImageView)v.FindViewById(R.Id.image);
v.setTag(viewHolder);
} else {
viewHolder = (viewHolder)v.getTag();
}
// 비디오 썸네일을 불러내는 구간 입니다.
Bitmap bm = MediaStore.Video.Thumbnails.getThumbnail(cr, item.getVideoId(), MediaStore.Video.Thumbnails.MINI_KIND, null);
Bitmap bmr = Bitmap.createScaledBitmap(bm, 360, 240, true);
// ViewHolder를 정의해서 썸네일을 보여줍니다.
viewHolder.img.setImageBitmap(bmr);
return v;
}
}
어쩌다보니 거의 전체 소스를 적었네요... int형 VideoId를 이용해서 썸네일을 불러냈습니다. 이렇게 해서 비디오 목록 및 썸네일 구현을 성공했습니다.
AsycnTask를 이용해서 이미지를 처리만 해주면 되는데...
doInBackground 영역에서 VideoId를 이용해서 썸네일을 보여주면 되는것 아닌가요?
예를 들어서
Protected Bitmap doInBackground(Interger... params) {} 이영역에
Bitmap bm = MediaStore.Video.Thumbnails.getThumbnail(cr, item.getVideoId(), MediaStore.Video.Thumbnails.MINI_KIND, null);
Bitmap bmr = Bitmap.createScaledBitmap(bm, 360, 240, true);
위와 같은 소스를 적어주어 사용하는 것아닌가요?...
HttpClient도 생각해 보았지만... 이건 웹에서 이미지를 받는 것이 아닌 비디오ID를 통해 썸네일을 보여주는 형식이라서 안될 것같아 포기했습니다.
인터넷을 참고하여 비디오리스트를 구현했지만 아직 초보자인 저로써는 이해가 잘 안됩니다...