Android生成缩略图-使用Android 2.2新特性完成
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:
<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">??
?????<imageview?android:layout_width="wrap_content"?android:layout_height="wrap_content"?android:layout_gravity="center"?android:src="@drawable/girl">??
?????<textview?android:layout_width="wrap_content"?android:layout_height="wrap_content"?android:layout_marginleft="10dp"?android:text="縮略圖:"?android:textcolor="#000000">??
?????<imageview?android:id="@+id/image"?android:layout_width="wrap_content"?android:layout_height="wrap_content"?android:layout_marginleft="20dp"?android:layout_margintop="10dp">??
</imageview></textview></imageview></linearlayout>??
Activity代碼:
public?class?MainActivity?extends?Activity?{??
??
?????@Override??
?????public?void?onCreate(Bundle?savedInstanceState)?{??
????????super.onCreate(savedInstanceState);??
????????setContentView(R.layout.main);??
??
????????ImageView?humbnail?=?(ImageView)?findViewById(R.id.image);??????????
??
???????//獲得一個Drawable對象??
???????Drawable?girl?=?getResources().getDrawable(R.drawable.girl);??
???????//將Drawable對象強轉為Bitmap位圖對象??
???????Bitmap?bitmap?=?((BitmapDrawable)girl).getBitmap();??
???????//利用Bitmap位圖對象生成縮略圖??
???????bitmap?=?ThumbnailUtils.extractThumbnail(bitmap,?51,?108);??
??
???????humbnail.setImageBitmap(bitmap);??
????}??
}??
運行結果:
好了,運行結果出來了,如圖所示,運行結果如預想一樣,創建了一個美女圖片的縮略圖,并且顯示了出來。這樣的結果看上去絲毫問題沒有,但是在這里,需要指出的是,雖然結果正確,但是過程卻是不正確的。
“過程不正確,那作者你為什么要這么寫呢?”,這樣的問題可能會出現在各位讀者的腦海中。別急,接下來我就解釋一下我為什么要這么寫,另外再重寫一個正確的代碼給大家。大家注意下面這兩行代碼:
//獲得一個Drawable對象??
Drawable?girl?=?getResources().getDrawable(R.drawable.girl);??
//將Drawable對象強轉為Bitmap位圖對象??
Bitmap?bitmap?=?((BitmapDrawable)girl).getBitmap();??
我相信絕大部分人都會通過這么一種強制轉換的方法來實現從Drawable到BitmapDrawable的轉換,這也是網上瘋狂流傳并誤導大家的。首先,利用強制轉換的方法來實現類型轉換這種方式,從代碼的角度看,它是不優雅的,是簡單粗暴的,缺乏代碼的美感;其次,因為BitmapDrawable是Drawable的子類,所以無法保證每一個Drawable對象都能正確的強制轉換為BitmapDrawable,這就給代碼增加了安全的因素。
其實Google的工程師們提供了從資源文件優雅獲取BitmapDrawable對象的方式。下面,我將貼出真正正確的寫法。
public?class?MainActivity?extends?Activity?{<p></p>??
<p>????@Override<br>??
????public?void?onCreate(Bundle?savedInstanceState)?{<br>??
???????super.onCreate(savedInstanceState);<br>??
???????setContentView(R.layout.main);</p>??
<p>???????ImageView?humbnail?=?(ImageView)?findViewById(R.id.image);????????</p>??
<p>???????//通過openRawResource獲取一個InputStream對象<br>??
???????InputStream?input?=?getResources().openRawResource(R.drawable.girl);<br>??
???????//通過InputStream創建BitmapDrawable對象<br>??
???????BitmapDrawable?girl?=?new?BitmapDrawable(input);<br>??
???????//通過BitmapDrawable對象獲取Bitmap對象<br>??
???????Bitmap?bitmap?=?girl.getBitmap();<br>??
???????//利用Bitmpa對象創建縮略圖<br>??
???????bitmap?=?ThumbnailUtils.extractThumbnail(bitmap,?51,?108);</p>??
<p>???????humbnail.setImageBitmap(bitmap);<br>??
????}<br>??
}</p>??
<pre?class="java:nocontrols"?name="code">這樣獲取BitmapDrawable對象的方式,是否比前面的代碼優雅并且安全了呢?<p></p>??
????????????</pre> ?
原文出處:http://www.androidzz.com/2011/08/android-picture-thumbnail-android-22/
轉載于:https://my.oschina.net/u/1866821/blog/394233
總結
以上是生活随笔為你收集整理的Android生成缩略图-使用Android 2.2新特性完成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蚌埠学院官网综合新闻条目抓取
- 下一篇: 小程序成长之路(四)-- 深入腾讯云(环