安卓加载视频缩略图,展示于ListView中,完美实现

安卓获取视频缩略图,展示于ListView中,完美实现

本篇博客为原创,来自于vitamio,转载请注明出处。

应用场景:

获取安卓手机外部存储视频列表,适配器继承至CursorAdapter,利用ViewHolder进行优化;并利用异步加载和缓存机制,在加上一个绑定TAG机制。在ListView中展示视频某一帧的图片,视频名称,视频大小以及视频时长。

分析说明:

在ListView中展示视频某一帧的画面,有以下几种方式。
1.从媒体库中查询

2. android 2.2以后使用ThumbnailUtils类获取

3.调用jni文件,实现MediaMetadataRetriever类

三种方法各有利弊:

第一种方法,新视频增加后需要SDCard重新扫描才能给新增加的文件添加缩略图,灵活性差,而且不是很稳定,适合简单应用

第二种方法,实现简单,但2.2以前的版本不支持

第三种方法,实现复杂,但比较灵活

为了在UI界面中展示视频缩略图不卡顿,不乱跳,不重复加载,简单方便的前提下,我选择第二种方式实现。

先定义一个MyVideoCursorAdapter类继承至CursorAdapter
package cn.lsj.mypalyer.adapter;

import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.CursorAdapter;
import android.text.format.Formatter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import cn.lsj.mypalyer.R;
import cn.lsj.mypalyer.bean.VideoBean;
import cn.lsj.mypalyer.utils.MyUtils;
import cn.lsj.mypalyer.utils.MyVideoThumbLoader;
import cn.lsj.mypalyer.view.MyImageView;

public class MyVideoCursorAdapter extends CursorAdapter {

private MyVideoThumbLoader mVideoThumbLoader;

public MyVideoCursorAdapter(Context context, Cursor c) {
    super(context, c);
    mVideoThumbLoader = new MyVideoThumbLoader();// 初始化缩略图载入方法
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {

    final VideoBean vb = VideoBean.getInstance(cursor);

    View view = View.inflate(mContext, R.layout.video_list_item, null);

    ViewHolder vh = new ViewHolder();

    vh.title = (TextView) view.findViewById(R.id.video_list_item_tv_title);
    vh.duration = (TextView) view
            .findViewById(R.id.video_list_item_tv_duration);
    vh.size = (TextView) view.findViewById(R.id.video_list_item_tv_size);
    vh.iv = (MyImageView) view.findViewById(R.id.iv);

    view.setTag(vh);

    vh.iv.setTag(vb.path);
    return view;
}

@Override
public void bindView(View view, final Context context, Cursor cursor) {

    final ViewHolder vh = (ViewHolder) view.getTag();
    final VideoBean vb = VideoBean.getInstance(cursor);

    vh.title.setText(vb.title);
    vh.duration.setText(MyUtils.DurationByMs(vb.duration));
    vh.si
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值