마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AsyncTask를 이용하여 비디오썸네일을 보여주려 하는데...

0 추천

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를 통해 썸네일을 보여주는 형식이라서 안될 것같아 포기했습니다.

인터넷을 참고하여 비디오리스트를 구현했지만 아직 초보자인 저로써는 이해가 잘 안됩니다... 

CEL (1,140 포인트) 님이 2014년 1월 9일 질문

1개의 답변

+1 추천
 
채택된 답변
Video 썸네일은 생소하지만

 

안드로이드 내 Video Storage 를 쓰는데 AsyncTask 를 써야하나요?

AsyncTask 보통 http 커넥션시 사용해봐서요.

Video 썸네일을 가져오는게 꼭 백그라운드 쓰레드를 이용해야하는 것이라면

AsyncTask를 만드시고.

Param 을 비디오id 를 넘기고 return 을 Bitmap 으로 onPostexcute 에서 받아오면 될것같네요
AND chobo (4,690 포인트) 님이 2014년 1월 10일 답변
CEL님이 2014년 1월 11일 채택됨
감사합니다. 하지만... 아직 id를 넘겨준다는 의미를 .. 잘...
다시한번 답변에 감사드립니다.
...