写这个文章是因为在实际应用中,由于手机中的视频文件较多50个以上时,会出现读取视频文件信息时间加长,ui显示就会变黑不显示。故而将截图改为异步方式,也有一些技术贴是将网络请求的图片变为异步加载。这两种方式的技术原理是大同小异的。结果如图

其中包括三个部分,一个是截图加载器,一个更新UI的反馈接口,另一个是界面部分使用。

1、截图加载器

/*** @title 异步加载图片* @author LiYa* @verson 1.0 Jan 30, 2012 10:44:41 AM*/
public final class PictureLoader {private Map<string mediametavo="">&gt; caches = new HashMap</string><string mediametavo="">&gt;();/*** 从sdcard中加载缩略图** @param path*            文件路径* @param callback*            回调* @return MediaMetaVo*/public MediaMetaVo loadBitmap(final String path,final PictureLoaderCallback callback) {if (caches.containsKey(path)) {MediaMetaVo metaVo = caches.get(path).get();if (metaVo != null) {return (metaVo);}}final Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {callback.bitmapCallback((MediaMetaVo) msg.obj);}};new Thread() {public void run() {MediaMetaVo vo = loadFormPath(path);caches.put(path, new SoftReference<mediametavo>(vo));handler.sendMessage(handler.obtainMessage(0, vo));};}.start();return null;}/*** 从路径加载图片** @param path* @return MediaMetaVo*/protected MediaMetaVo loadFormPath(String path) {MediaMetadataRetriever retriver = null;MediaMetaVo vo = new MediaMetaVo();try {retriver = new MediaMetadataRetriever();if (path.endsWith(SysUtils.MP3_SUFFIX)) {if (getSdk() &lt; 9) {retriver.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);}retriver.setDataSource(path);String duration = retriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);vo.duration = duration;} else if (path.endsWith(SysUtils.MP4_SUFFIX)) {if (getSdk() &lt; 9) {retriver.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY| MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);retriver.setDataSource(path);String duration = retriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);vo.duration = duration;Bitmap bit = retriver.captureFrame();Bitmap nBitmap = Bitmap.createScaledBitmap(bit,SysUtils.PICTURE_WIDTH_DEFAULT,SysUtils.PICTURE_HEIGHT_DEFAULT, false);vo.coverPic = nBitmap;bit.recycle();} else {retriver.setDataSource(path);String duration = retriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);vo.duration = duration;Bitmap bitmap = retriver.getFrameAtTime();Bitmap nBitmap = Bitmap.createScaledBitmap(bitmap,SysUtils.PICTURE_WIDTH_DEFAULT,SysUtils.PICTURE_HEIGHT_DEFAULT, false);vo.coverPic = nBitmap;bitmap.recycle();}}} catch (Exception e) {e.printStackTrace();}return (vo);}/* ================================================ *//*** 得到系统版本** @return*/public static float SysVersion() {String ver = VERSION.RELEASE;if (ver.length() &gt; 3)ver = ver.substring(0, 3);float verF = Float.valueOf(ver);return verF;}public int getSdk() {float ver = SysVersion();if (ver &lt; = 1.6f)return Integer.valueOf(VERSION.SDK);else {VERSION_16 ver16 = new VERSION_16();return ver16.getSdk();}}private class VERSION_16 {public VERSION_16() {}public int getSdk() {return VERSION.SDK_INT;}}/* ================================================ */
}
</mediametavo></string>

二、接口

/*** @title* @author LiYa* @verson 1.0 Jan 30, 2012 10:29:47 AM*/
public interface PictureLoaderCallback {/*** 更新ui状态* @param bitmap*/public void bitmapCallback(MediaMetaVo bitmap);
}

转载于:https://www.cnblogs.com/loveyy/archive/2012/07/03/2574230.html

Android下异步扫描视频文件缩略图相关推荐

  1. Android获取网络视频文件缩略图

    一,通过Android系统自带的类获取: 1.  public staticBitmapcreateVideoThumbnail(String filePath,int kind){     Bitm ...

  2. 【开源项目----Android OPenGLES渲染YUV视频文件】

    [开源项目----Android OPenGLES渲染YUV视频文件] OpenGLES对YUV渲染相关文章参考

  3. android 大文件加密,如何在android中加密大视频文件

    我有一个应用程序,我正在使用该代码来解密已加密的文件.文件位置是"/mnt/sdcard/myfolder/test.mp4". test.mp4文件大小约为20MB.如何在and ...

  4. Android中下载音视频文件

    整理下最近项目做过的关于下载音视频的思路,只说思路,不会上具体代码. 我们从粗到细,慢慢道来.(本人菜鸟一枚,我这里只是说下自己的思路,有大神看见了此文章,如果有更好的解决方案,欢迎留言指正, 只是起 ...

  5. android flv格式的视频文件,android-如何运行mkv,flv,avi格式的视频文件?

    我正在制作一个项目,使用使用videoview的简单代码,我可以播放3gp amd mp4格式的视频文件 vv = (VideoView) findViewById(R.id.videoView); ...

  6. 实践:基于腾讯云播放器SDK,带您体验播放多场景下的 COS 视频文件

    一. 实践步骤 1. 准备您的 腾讯云COS 视频文件链接,您需要: 1.1 创建一个存储桶: 1.2 上传对象: 1.3 在对象信息详情里复制对象地址: 注意: 目前腾讯云有COS特惠活动,新人1元 ...

  7. Android将多个视频文件拼接为一个文件

    正文 利用android的2个类MediaExtractor(抽取音/视频帧) + MediaMuxer (将音视频重新写入一个多媒体文件,完成封装). 合成文件为MP4.为啥是MP4? 因为andr ...

  8. java 视频 缩略图_Java截取视频文件缩略图

    /** * 截取视频第0帧的图片 */ public static void videoImage(String filePath, String fileName,int widthdist, in ...

  9. android放微信短视频文件,参考微信实现的短视频录像

    Recorder 参考微信实现的短视频录像 allprojects { repositories { ... maven { url 'https://jitpack.io' } } } depend ...

  10. android 下载视频文件怎么打开,安卓手机支付宝文件夹下的视频文件是什么

    手机支付宝给我们带来了移动端的便捷,同时也为我们带来了许许多多的忧愁.近期就有用户发现,支付宝APP文件夹里有"奇怪的视频".具体路径位于:alipay → mutimedia → ...

最新文章

  1. CSS之布局(外边距的折叠)
  2. Maven把一个Application转换成WebProject
  3. Ivan Fedorov:用已知无法想象未来 - Mixin Network开发者访谈
  4. yxcms安装环境php,Windows7下PHP开发环境安装配置图文方法
  5. lnmp php文件访问不了,记一次lnmp环境下无法执行php文件
  6. 云计算与星辰大海的结合——不要回答,来自百亿光年外的未知信号
  7. MyBatis-Plus_查询进阶01
  8. SpringAOP Aspect注解实现简单日志功能
  9. 文件路径和模块路径、nodemon工具
  10. python批量打印机excel_python批量设置多个Excel文件页眉页脚的脚本
  11. java list集合运算
  12. redis学习笔记---java操作redis,使用expire模拟指定时间段内限制ip访问的次数;
  13. mysql5.0驱动_mysql5.0驱动包
  14. WebClass实现动态WEB编程之实践篇 (转)
  15. 存储介质(sd卡,硬盘等)读写速度测试
  16. Oracle获取拼音简码
  17. dataframe两个表合并_DataFrame踩坑整理(一)
  18. HDU 4125 Moles 线段树+KMP
  19. office计算机二级第26套word,全国计算机等级考试二级msoffice高级应用(word部分:第11-20套).docx...
  20. 数据加密解决方案有哪些?

热门文章

  1. open-falcon采集的一些指标及说明
  2. 手把手教你Windows环境下配置Git环境
  3. Linux的java配置及tomcat的启动
  4. 动态开辟内存_C/C++工程师你理解程序的内存分区吗?
  5. c#先进行uri解码_JavaScript、C# URL编码、解码总结
  6. 8. 额外的并发实用程序(Additional Concurrency Utilities)
  7. 【渝粤教育】国家开放大学2018年春季 0221-22T数字电子电路 参考试题
  8. 【sklearn第十三讲】Naive Bayes分类器
  9. scanf 与 scanf_s
  10. C# winForm utf8 gbk 相互转码小工具