動畫與多媒體
Android中的繪圖工具類
Android中常見的三個繪圖類∶
Paint(畫筆)
Canvas(畫布)
Paint即畫筆,在繪圖過程中起到了極其重要的作用
畫筆主要保存了顏色,樣式等繪制信息,指定了如何繪制文本和圖形畫筆對象有很多設(shè)置方法,大體上可以分為兩類:一類與圖形繪制相關(guān),一類與文本繪制相關(guān)
Canvas的構(gòu)造方法
Canvas():創(chuàng)建一個空的畫布,可以使用setBitmap()方法來設(shè)置繪制具體的畫布。
Canvas(Bitmap bitmap): 以bitmap對象創(chuàng)建一個畫布,將內(nèi)容都繪制在bitmap上,因此bitmap不得為null。
Path類
addArc(RectF oval, float startAngle, float sweepAngle ∶為路徑添加一個多邊形
addCircle(float x, float y, float radius, Path.Direction dir):給path添加圓圈
addOval(RectF oval, Path.Direction dir):添加橢圓形
addArc(RectF oval, float startAngle, float sweepAngle :為路徑添加一個多邊形
addCircle(float x, float y, float radius, Path.Direction dir)∶給path添加圓圈
addOva(RectF oval, Path.Direction dir):添加橢圓形
addRect(RectF rect, Path.Direction dir):添加一個區(qū)域
addRoundRect(RectF rect, float[] radii, Path.Direction dir):添加一個圓角區(qū)域
isEmpty()∶判斷路徑是否為空
transform(Matrix matrix):應(yīng)用矩陣變換
transform(Matrix matrix, Path dst):應(yīng)用矩陣變換并將結(jié)果放到新的路徑中,即第二個參數(shù)。
用于描點(diǎn)、連線。在創(chuàng)建好Path路徑后,可以調(diào)用Canvas的drawPath(path,paint)將圖形繪制出來。
常用方法︰
Android中的動畫
Android中的動畫常見的主要有三種:
逐幀動畫(Frame)
補(bǔ)間動畫(Tween)
屬性動畫(Property)
幀動畫概念以及用法︰
通過AnimationDrawable類實(shí)現(xiàn),代碼中調(diào)用start()以及stop)開始或停止播放動畫
在Java代碼中創(chuàng)建逐幀動畫,通過創(chuàng)建AnimationDrawable對象,然后調(diào)用相關(guān)方法實(shí)現(xiàn)
幀動畫是簡單的由N張靜態(tài)圖片收集起來,然后通過控制依次顯示這些圖片,眼“視覺殘留”的原因,會讓人造成動畫的“錯覺”,類似放電影的原理
Android中實(shí)現(xiàn)幀動畫的方式
Android中使用幀動畫的步驟︰
編寫動畫文件(先在res下創(chuàng)建一個anim目錄,編寫動畫文件)
在代碼中獲取AnimationDrawable幀動畫實(shí)例
調(diào)用該實(shí)例的start()方法,播放動畫
調(diào)用該實(shí)例的stop()方法,停止動畫
補(bǔ)間動畫的概念
與幀動畫不同,幀動畫是通過連續(xù)播放圖片來模擬動畫效果,而補(bǔ)間動畫開發(fā)者只需指定動畫開始,以及動畫結(jié)束"關(guān)鍵幀”,而動畫變化的"中間幀"則由系統(tǒng)計算并補(bǔ)齊
補(bǔ)間動畫的分類
AlphaAnimation :透明度漸變效果,創(chuàng)建時許指定開始以及結(jié)束透明度,還有動畫的持續(xù)時間,透明度的變化范圍(O,1),0是完全透明,1是完全不透明;對應(yīng)
<alpha/>
標(biāo)簽!ScaleAnimation:縮放漸變效果,創(chuàng)建時需指定開始以及結(jié)束的縮放比,以及縮放參考點(diǎn),還有動畫的持續(xù)時間;對應(yīng)
<scale/>
標(biāo)簽!TranslateAnimation:位移漸變效果,創(chuàng)建時指定起始以及結(jié)束位置,并指定動畫的持續(xù)時間即可;對應(yīng)
<translate/>
標(biāo)簽!RotateAnimation :旋轉(zhuǎn)漸變效果,創(chuàng)建時指定動畫起始以及結(jié)束的旋轉(zhuǎn)角度,以及動畫持續(xù)時間和旋轉(zhuǎn)的軸心﹔對應(yīng)
<rotate/>
標(biāo)簽AnimationSet:組合漸變,就是前面多種漸變的組合,對應(yīng)
<set/>
標(biāo)簽Interpolator接口用來控制動畫的變化速度,Android中提供了以下已實(shí)現(xiàn)該接口可供選擇的實(shí)現(xiàn)類∶
LinearInterpolator:動畫以均勻的速度改變
AccelerateInterpolator:在動畫開始的地方改變速度較慢,然后開始加速
AccelerateDecelerateInterpolator:在動畫開始、結(jié)束的地方改變速度較慢,中間時加速
CycleInterpolator :動畫循環(huán)播放特定次數(shù),變化速度按正弦曲線改變︰Math.sin(2 * mCycles * Math.PI * input)
DecelerateInterpolator:在動畫開始的地方改變速度較快,然后開始減速
AnticipateInterpolator:反向,先向相反方向改變一段再加速播放
AnticipateOvershootInterpolator:開始的時候向后然后向前甩一定值后返回最后的值
BounceInterpolator:跳躍,快到目的值時值會跳躍,如目的值100,后面的值可能依次為85,77,70,8o ,90,100
OvershottInterpolator:回彈,最后超出目的值然后緩慢改變到目的值
調(diào)用動畫對象setAnimationListener(new AnimationListener())方法,重寫下面的三個方法實(shí)現(xiàn)對動畫的執(zhí)行狀態(tài)進(jìn)行監(jiān)聽︰
onAnimationStart():動畫開始
onAnimtaionRepeat():動畫重復(fù)
onAnimationEnd():動畫結(jié)束
為View動態(tài)設(shè)置動畫效果步驟
先調(diào)用AnimationUtils.loadAnimation(動畫xml文件)
然后View控件調(diào)用startAnimation(anim)開始動畫
為Fragment設(shè)置過渡動畫,可以調(diào)用FragmentTransaction對象的setTransition(int transit)為Fragment指定標(biāo)準(zhǔn)的過場動畫。
transit的可選值︰
TRANSIT_NONE∶無動畫
TRANSIT_FRAGMENT_OPEN:打開形式的動畫
TRANSIT_FRAGMENT_CLOSE:關(guān)閉形式的動畫
轉(zhuǎn)場動畫(Activity Transition)基本介紹
進(jìn)入∶決定Activity中的所有的視圖怎么進(jìn)入屏幕。
退出︰決定一個Activity中的所有視圖怎么退出屏幕。
共享元素︰決定兩個activities之間的過渡,怎么共享(它們)的視圖。
進(jìn)入和退出包含如下動畫效果︰
explode(分解)–從屏幕中間進(jìn)或出
slide(滑動)-從屏幕邊緣進(jìn)或出地
fade(淡出)-通過改變屏幕上視圖的不透明度達(dá)到添加或者移除視圖的效果
共享元素包含如下動畫效果
changeBounds -改變目標(biāo)視圖的布局邊界
changeClipBounds -裁剪目標(biāo)視圖邊界
changeTransform -改變目標(biāo)視圖的縮放比例和旋轉(zhuǎn)角度
changeImageTransform -改變目標(biāo)圖片的大小和縮放比例
Android中的音視頻管理
Android常見多媒體API開發(fā)
利用SoundPool用來播放密集、急促而又短暫的音效
使用MediaRecord錄音
利用MediaPlayer播放音頻與視頻
SoundPool簡介
SoundPool一般用來播放密集,急促而又短暫的音效,比如特技音效
SoundPool對象可以看作是一個可以從APK中導(dǎo)入資源或者從文件系統(tǒng)中載入文件的樣本集合
SoundPool使用音效池的概念來管理多個播放流,如果超過流的最大數(shù)目,SoundPool會基于優(yōu)先級自動停止先前播放的流
SoundPool還支持自行設(shè)置聲音的品質(zhì)、音量、播放比率等參數(shù)
SoundPool一般在游戲用得較多,也可以為APP添加,比如酷狗音樂進(jìn)入時播放"哈嘍,酷狗"
MediaPlayer簡介
本地資源
內(nèi)部的URI,例如可以通過ContentResolver來獲取
外部URL(流)對于Android所支持的的媒體格式列表
該類是Android多媒體框架中的一個重要組件,可以通過這個API來播放音頻和視頻
通過該類可以以最小的步驟來獲取、解碼和播放音視頻
該類支持三種不同的媒體來源
獲得MediaPlayer實(shí)例
直接new或者調(diào)用create方法創(chuàng)建
通過create方式創(chuàng)建
設(shè)置播放文件
通過create或setDataSource方式設(shè)置播放文件/ /①raw下的資源:
利用setDataSource方法設(shè)置播放文件時的注意事項
MediaPlayer主要用于播放音頻,也可以用來播放視頻,但由于MediaPlay默認(rèn)沒有提供圖像輸出界面,所以播放視頻時需要借助其他的組件來顯示MediaPlayer播放的圖像輸出。
MediaPlay播放視頻時有以下注意事項
MediaPlayer是使用Surface進(jìn)行視頻的展示的
MediaPlayer只支持mp4、avi、3gp格式的視頻,支持格式相對單一
MediaPlayer可以播放網(wǎng)絡(luò)視頻,支持的網(wǎng)絡(luò)視頻的協(xié)議為:Http協(xié)議和RTSP協(xié)議兩種
MediaRecord簡介
優(yōu)點(diǎn)︰使用方便,得到就是編碼和封裝好的音視頻文件,可以直接使用
缺點(diǎn)︰無法獲取原始數(shù)據(jù),從而無法原始數(shù)據(jù)添加一些自己的處理
MediaRecorder是安卓提供的一個用于音視頻采集的類
對于原始數(shù)據(jù)還需要進(jìn)行編碼和封裝,才能使用,為了方便,google提供了MediaRecorder這個類,通過它會自動將原始數(shù)據(jù)進(jìn)行編碼和封裝
MediaRecorder的優(yōu)缺點(diǎn)
使用Camera
Android中Camera的拍照主要有兩種
調(diào)用系統(tǒng)自帶相機(jī)拍照,然后獲取拍照后的圖片
自定義拍照頁面
調(diào)用系統(tǒng)自帶Carema :
相機(jī)拍照后會返回一個intent給onActivityResult
Intent的extra部分包含一個編碼過的 Bitmap
拍完的圖片是不會保存到本地的,需要編碼保存圖片到SD卡中