2019独角兽企业重金招聘Python工程师标准>>>

在Android 2.2版本之前,如果需要完成缩略图功能,往往是通过Bitmap、Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图。但是到了Andorid 2.2版本,如果大家还这么做,那么就证明大家已经成为那个专打怪兽的奥特曼(out man)超人了。

在Android 2.2版本中,新增了一个ThumbnailUtils工具类来是实现缩略图,此工具类的功能是强大的,使用是简单,它提供了一个常量和三个方法。利用这些常数和方法,可以轻松快捷的实现图片和视频的缩略图功能。(亲,你没有看错,还包括生成视频的缩略图哦)

下面将依次说明一下这些常数和方法。

常数:

OPTIONS_RECYCLE_INPUT: 从此常量用于表示应该回收extractThumbnail(Bitmap, int, int, int)输入源图片(第一个参数),除非输出图片就是输入图片。

方法:

Bitmap createVideoThumbnail(String filePath, int kind)

从方法名称即可看出,这个方法用于生成视频缩略图。

参数:

filePath: 视频文件路径

kind:  文件种类,可以是 MINI_KIND 或 MICRO_KIND

Bitmap extractThumbnail(Bitmap source, int width, int height, int options)

此方法用于生成一个指定大小的图片缩略图。

参数:

source: 需要被创造缩略图的源位图对象

width: 生成目标的宽度

height: 生成目标的高度

options:在缩略图抽取时提供的选项

Bitmap extractThumbnail(Bitmap source, int width, int height)

此方法用于生成一个指定大小的图片缩略图。

参数:

source: 需要被创造缩略图的源位图对象

width: 生成目标的宽度

height: 生成目标的高度

简单的方法,简单的常数,看完这些后,就可以开始创建缩略图了。下面以创建一个美女图片的缩略图为例,展示一下创建缩略图的步骤:

布局文件 main.xml:

  1. <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="#999999" android:layout_width="fill_parent" android:layout_height="fill_parent">

  2. <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/girl">

  3. <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:text="缩略图:" android:textcolor="#000000">

  4. <imageview android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="20dp" android:layout_margintop="10dp">

  5. </imageview></textview></imageview></linearlayout>

Activity代码:

  1. public class MainActivity extends Activity {

  2. @Override

  3. public void onCreate(Bundle savedInstanceState) {

  4. super.onCreate(savedInstanceState);

  5. setContentView(R.layout.main);

  6. ImageView humbnail = (ImageView) findViewById(R.id.image);

  7. //获得一个Drawable对象

  8. Drawable girl = getResources().getDrawable(R.drawable.girl);

  9. //将Drawable对象强转为Bitmap位图对象

  10. Bitmap bitmap = ((BitmapDrawable)girl).getBitmap();

  11. //利用Bitmap位图对象生成缩略图

  12. bitmap = ThumbnailUtils.extractThumbnail(bitmap, 51, 108);

  13. humbnail.setImageBitmap(bitmap);

  14. }

  15. }

运行结果:

好了,运行结果出来了,如图所示,运行结果如预想一样,创建了一个美女图片的缩略图,并且显示了出来。这样的结果看上去丝毫问题没有,但是在这里,需要指出的是,虽然结果正确,但是过程却是不正确的。

“过程不正确,那作者你为什么要这么写呢?”,这样的问题可能会出现在各位读者的脑海中。别急,接下来我就解释一下我为什么要这么写,另外再重写一个正确的代码给大家。大家注意下面这两行代码:

  1. //获得一个Drawable对象

  2. Drawable girl = getResources().getDrawable(R.drawable.girl);

  3. //将Drawable对象强转为Bitmap位图对象

  4. Bitmap bitmap = ((BitmapDrawable)girl).getBitmap();

我相信绝大部分人都会通过这么一种强制转换的方法来实现从Drawable到BitmapDrawable的转换,这也是网上疯狂流传并误导大家的。首先,利用强制转换的方法来实现类型转换这种方式,从代码的角度看,它是不优雅的,是简单粗暴的,缺乏代码的美感;其次,因为BitmapDrawable是Drawable的子类,所以无法保证每一个Drawable对象都能正确的强制转换为BitmapDrawable,这就给代码增加了安全的因素。

其实Google的工程师们提供了从资源文件优雅获取BitmapDrawable对象的方式。下面,我将贴出真正正确的写法。

  1. public class MainActivity extends Activity {<p></p>

  2. <p>    @Override<br>

  3. public void onCreate(Bundle savedInstanceState) {<br>

  4. super.onCreate(savedInstanceState);<br>

  5. setContentView(R.layout.main);</p>

  6. <p>       ImageView humbnail = (ImageView) findViewById(R.id.image);        </p>

  7. <p>       //通过openRawResource获取一个InputStream对象<br>

  8. InputStream input = getResources().openRawResource(R.drawable.girl);<br>

  9. //通过InputStream创建BitmapDrawable对象<br>

  10. BitmapDrawable girl = new BitmapDrawable(input);<br>

  11. //通过BitmapDrawable对象获取Bitmap对象<br>

  12. Bitmap bitmap = girl.getBitmap();<br>

  13. //利用Bitmpa对象创建缩略图<br>

  14. bitmap = ThumbnailUtils.extractThumbnail(bitmap, 51, 108);</p>

  15. <p>       humbnail.setImageBitmap(bitmap);<br>

  16. }<br>

  17. }</p>

  18. <pre class="java:nocontrols" name="code">这样获取BitmapDrawable对象的方式,是否比前面的代码优雅并且安全了呢?<p></p>

  19. </pre>

原文出处:http://www.androidzz.com/2011/08/android-picture-thumbnail-android-22/

转载于:https://my.oschina.net/u/1866821/blog/394233

Android生成缩略图-使用Android 2.2新特性完成相关推荐

  1. android studio viewo,android studio 3.6.0 绑定视图新特性的方法

    Android studio 3.6.0 绑定视图使用方法 1.确保你的 build gradle 最低为3.6.0 dependencies { classpath 'com.android.too ...

  2. Android O(SDK 8.0)新特性,刘海屏

    > Android刘海屏 Android 屏幕,16:9,17:9,19:10,18:9,18.5:9所谓全面屏.挖孔屏.凹凸屏等. android 全面屏/刘海屏有效适配- https://b ...

  3. Android Q(10.0)版本新特性和兼容性适配

    北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了.Android Q 为开发者们带来了许多新 ...

  4. Android生成缩略图的方法

    Android9.0 之前,使用BitmapFactory生成缩略图. 举例:使用ThumbnailTask生成缩略图,GridViewAdapter显示缩略图 static class Thumbn ...

  5. android生成aar无效,android studio生成aar包并在其他工程引用aar包的方法

    1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...

  6. android 生成debug.keystore,android sdk 如何重新生成debug.keystore

    1)首先你要确定你安装的JDK位置,Windows->Preferences->Java->Installed JREs,你可以看到是Jre的location,再在dos cmd模式 ...

  7. android生成md5,使用Android studio生成签名文件以及获取MD5

    内容要点:android 一.Android studio生成签名文件安全 二.经过Android studio获取MD5app 1.Android studio生成签名文件ide 在菜单栏中,点击 ...

  8. android生成apk流程,Android Studio生成APK的基本流程

    Android Studio生成APK的基本流程 2020年08月14日 | 萬仟网移动技术 | 我要评论 Android Studio生成APK流程修改版本号和文件名安全加固(可选)生成签名apk修 ...

  9. android 生成aar文件,Android 中.aar文件生成方法与用法

    https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...

最新文章

  1. oracle 工具:tkprof
  2. python提升计算速度的方法
  3. AndroidStudio 3.0升级之compile、implementation简要说明
  4. pythonnamedtuple定义类型_详解Python中namedtuple的使用
  5. 【AI不惑境】模型压缩中知识蒸馏技术原理及其发展现状和展望
  6. 特斯拉自动驾驶系统秘密,来自特斯拉AI总监爆料
  7. 公司服务器iSCSI网络硬盘连接故障
  8. linux Centos 服务器之间文件共享挂载
  9. Android ViewFlipper翻转视图的基本使用
  10. 什么是JBPM工作流
  11. linux kali局域网远程桌面,kali使用rdesktop连接Windows远程桌面
  12. Pr:用 Au 协作处理音频
  13. 哪些产品需要过3C认证?3C认证具体清单
  14. php中的资源是什么意思,PHP 和 COM
  15. 磊科路由器dns服务器老要修复,路由器dns异常解决方法
  16. HDU 4125 Moles 树状数组 + KMP
  17. 告别无聊的log:让你的Logcat 输出多彩日志
  18. 工具类 - 生成6位短信验证码
  19. 罗技G402插上电脑后没反应
  20. unity 2d摄像机类型_Unity法线水,顺便利用CommandBuffer实现廉价的深度和截屏

热门文章

  1. 【Python】编程笔记6
  2. 组织软件测试中应当避免的几个常见现象
  3. 计算机专业考研英语二国家线,历年考研英语国家线汇总(2009-2020)
  4. uat环境是什么环境_环境污染会对环境造成怎样的损害?污水处理活性炭能起到什么效果呢?...
  5. 秒表项目_【速看】2021年陕西中考体育怎么考?中考体育项目及考试评分标准最全整理来了!...
  6. 神策数据受邀出席,携手亚马逊云科技共建智能家居新航海时代
  7. 直播预告丨加速消费金融行业运营体系新升级,驱动经营提质增效!
  8. Python scrapy爬取京东,百度百科出现乱码,解决方案
  9. tomcat占用cpu比较多
  10. 我XXXX!!!够了!!!从github拉到dockerhub,再用daocloud加速下载