• 首先在vender/mediatek/properties/packags/apps/FileManager/src/com/mediatek/filemanager/IconManager.java中导入两个类

    import android.media.ThumbnailUtils;
    import android.provider.MediaStore.Video.Thumbnails;
  • 在getIcon方法中添加
    Bitmap icon=null;//方法已经定义,不需添加
    //显示图片缩略图
    if(mimeType.startsWith("image/")){
    Bitmap bitmap=BitmapFactory.decodeFile(fileInfo.getFileAbsolutePath());//fileInfo.getFileAbsolutePath()方法得到文件路径的字符串形式
    icon=ThumbnailUtils.extractThumbnail(bitmap,96,96,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
    }
    //显示视频第一帧缩略图
    if(mimeType.startsWith("video/")){
    icon=ThumbnailUtils.createVideoThumbnail(fileInfo.getFileAbsolutePath(),Thumbnails.MICRO_KIND);
    }
    //针对HTML和HTM文件后缀进行判别显示相应的图片
    int iconId=getDrawableId(service,mimeType);//已经定义,无需添加
    if(mimeType.startsWith("text/html")){
    if(fileInfo.getFileAbsolutePath().endsWith("html")){
    iconId=R.drawable.fm_html;
    }
    else{
    iconId=R.drawable.fm_htm;
    }
    }
  • 在不知道以上方法的时候,以下是加载图片缩略图在网上找到的另外一种实现方式
    private static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight) {final int height = options.outHeight;final int width = options.outWidth;int inSampleSize = 1;if (height > reqHeight || width > reqWidth) {final int halfHeight = height / 2;final int halfWidth = width / 2;while ((halfHeight / inSampleSize) > reqHeight&& (halfWidth / inSampleSize) > reqWidth) {inSampleSize *= 2;}}return inSampleSize;}// 如果是放大图片,filter决定是否平滑,如果是缩小图片,filter无影响private static Bitmap createScaleBitmap(Bitmap src, int dstWidth,int dstHeight) {Bitmap dst = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, false);if (src != dst) { // 如果没有缩放,那么不回收src.recycle(); // 释放Bitmap的native像素数组}return dst;}// 从Resources中加载图片public static Bitmap decodeSampledBitmapFromResource(Resources res,int resId, int reqWidth, int reqHeight) {final BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeResource(res, resId, options); // 读取图片长宽options.inSampleSize = calculateInSampleSize(options, reqWidth,reqHeight); // 计算inSampleSizeoptions.inJustDecodeBounds = false;Bitmap src = BitmapFactory.decodeResource(res, resId, options); // 载入一个稍大的缩略图return createScaleBitmap(src, reqWidth, reqHeight); // 进一步得到目标大小的缩略图}// 从sd卡上加载图片public static Bitmap decodeSampledBitmapFromFd(String pathName,int reqWidth, int reqHeight) {final BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeFile(pathName, options);options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);options.inJustDecodeBounds = false;Bitmap src = BitmapFactory.decodeFile(pathName, options);return createScaleBitmap(src, reqWidth, reqHeight);}
  • 将以上方法添加到类IconManager中,同时在getIcon方法中添加调用以上方法的语句
    if(mimeType.startsWith("image/")){
    icon=decodeSampleBitmapFromFd(fileInfo.getFileabsolutePath(),96,96);
    }
  • 此方法可以实现图片缩略图的显示,但是对图片进行删除操作时,会出现报错,程序终止退出,报错内容如下
  • 通过报错信息我们可以发现错误出现在下面这句代码上,应该是在删除图片后,src为null,该方法不能解析空资源,会抛出文件找不到异常(FileNotFoundException)因此报错
    Bitmap dst = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, false);
  • 我的解决方法是对资源src进行判断,如果资源为空则不进行资源解析,即不执行上面的代码,修改如下
    private static Bitmap createScaleBitmap(Bitmap src, int dstWidth,int dstHeight) {
    Bitmap dst=null;
    if(src!=null){
    dst = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, false);
    }if (src != dst) { src.recycle();}return dst;}
  • 结果成功

在文件管理器中显示图片的缩略图和视频第一帧的缩略图相关推荐

  1. Android 加载本地图片(文件管理器中的图片墙)

    Android 加载本地图片(文件管理器中的图片墙) --关于图片墙的一些感悟与疑问,希望大家共同探讨. (By伊叶也) 图片显示及监听 1.图片显示:基本上就5种显示形式(如果同时嵌入5种形式,采用 ...

  2. Win10如何删除资源管理器中的图片/文档/音乐/视频等文件夹?

    Win10如何删除资源管理器中的图片/文档/音乐/视频等文件夹? 使用Win10系统的过程中,打开"此电脑",在资源管理器上面会有图片/文档/音乐/视频等6个文件夹,相信绝大数的用 ...

  3. android 获取视频第一帧作为缩略图

    今天,简单讲讲android里如何获取一个视频文件的第一帧作为缩略图显示在界面上. 之前,我说个最近需要从服务器下载视频文件,但是下载后肯定需要显示视频的缩略图在界面上给用户看,于是想到显示视频的第一 ...

  4. U盘插在电脑上可以检测到,但是在文件管理器中不显示U盘

    U盘插在电脑上可以检测到,但是在文件管理器中不显示U盘.此种情况多半是U盘驱动出了问题. 右击"我的电脑"->管理->通用串行总线控制器->找到U盘对应项,右击选 ...

  5. 计算机网络的视频资源管理器,如何在资源管理器中显示视频文件内容的缩略图 – 手机爱问...

    2009-09-05 但在开始-程序中能找到视频设备.就是不能在资源管理器中显示. 你安装一下驱动试试如果是无驱的,建议修复一下系统,如果还不行,建议安装驱动.1.开机按F8不动到高级选项出现在松手, ...

  6. python opencv 内存泄露_解决python中显示图片的plt.imshow plt.show()内存泄漏问题

    当要处理批量图片,且每张图片都要进行显示时,用plt.imshow() plt.show()会出现内存泄漏, 管理器中看到其中一个python进程的内存不断上涨,目前有找到解决方法 from matp ...

  7. python plt.show_解决python中显示图片的plt.imshow plt.show()内存泄漏问题

    当要处理批量图片,且每张图片都要进行显示时,用plt.imshow() plt.show()会出现内存泄漏, 管理器中看到其中一个python进程的内存不断上涨,目前有找到解决方法 from matp ...

  8. ViewPager中显示图片和播放视频填坑之旅

    一.需求来源与实现思路 1.最近项目需求中有用到需要在ViewPager中播放视频和显示图片的功能,视频是本地视频,最开始的实现思路是ViewPager中根据当前item位置对应的是图片还是视频去初始 ...

  9. linux终端查看文件夹图片,如何在Linux终端中显示图片

    Linux 上有许多 GUI 图片浏览器.但我尚未听说或使用过任何在终端中显示图片的应用程序.幸运的是,我刚刚发现了一个可用于在终端中显示图像的名叫 FIM 的图像查看器.FIM 引起了我的注意,是因 ...

最新文章

  1. 利用fnd_conc_global.set_req_globals设置子请求的Parent Request ID
  2. C#的Equals不区分大小写
  3. 90.386(32位)的保护模式 (286是过渡24位) 91.什么是实模式
  4. 在ASP.NET页面中实现数据柱状图
  5. NYOJ【士兵杀敌(二)】
  6. 获取以逗号分隔的多个数据输入成列表,计算基本统计值(平均值、标准差、中位数)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬
  7. 时序约束基础 和 quartusII 中的设置
  8. *【CodeForces - 195B】After Training (多解,模拟)
  9. CFileDialog
  10. 基元线程同步构造之waithandle中 waitone使用
  11. Java基础-SSM之mybatis快速入门篇
  12. ajax velocity,velocity 使用js
  13. 2015最新安卓例子自定义控件等分类源码免费下载
  14. 2#使用新安装的ubuntu,之vim必须知道的细节
  15. 移动硬盘驱动器读到,但不显示盘符
  16. 3D VReasy 易捷工业VR解决方案
  17. vue集成Luckyexcel实现在线编辑Excel,可自行导入,也可从服务器端获取
  18. 自然语言处理-应用场景-文本分类:基于LSTM模型的情感分析【IMDB电影评论数据集】--(重点技术:自定义分词、文本序列化、输入数据批次化、词向量迁移使用)
  19. ES 查询示例 搜索 分组 去重 分页 排序
  20. 【如何做到自律,保持专注】

热门文章

  1. 全基因组选择-GS的技术评估
  2. 语音识别-音素的上下文建模
  3. 35去一线城市找工作_空间计算如何改变一线工作的现状
  4. iPhone无法充电小技巧
  5. Unity隐身 观察隐身
  6. “智慧高速公路”建设应重点提升“智慧化的出行服务”
  7. 慧极必伤,情深不寿,强极则辱;谦谦君子,温润如玉
  8. 迁移Hexo博客到Google渐进式Web应用(PWA)
  9. 同样是90后别人家的孩子已经是年薪百万算法工程师,而你呢?
  10. html 图像处理 灰度图和浮雕图类PS