Android 矩陣ColorMatrix
中文名:坐標(biāo)矩陣
高等數(shù)學(xué)里有介紹,在圖像處理方面,主要是用于平面的縮放、平移、旋轉(zhuǎn)等操作。
在Android里面,Matrix由9個(gè)float值構(gòu)成,是一個(gè)3*3的矩陣。最好記住。如下圖
各個(gè)字段的含義:
上面的sinX和cosX,表示旋轉(zhuǎn)角度的cos值和sin值,注意,旋轉(zhuǎn)角度是按順時(shí)針方向計(jì)算的。
translateX和translateY表示x和y的平移量。scale是縮放的比例,1是不變,2是表示縮放1/2,這樣子。
如何使用
set,pre,post方法
Matrix調(diào)用一系列set,pre,post方法時(shí),可視為將這些方法插入到一個(gè)隊(duì)列.當(dāng)然,按照隊(duì)列中從頭至尾的順序調(diào)用執(zhí)行.
其中
pre表示在隊(duì)頭插入一個(gè)方法,
post表示在隊(duì)尾插入一個(gè)方法.
而set表示把當(dāng)前隊(duì)列清空,并且總是位于隊(duì)列的最中間位置.
當(dāng)執(zhí)行了一次set后:pre方法總是插入到set前部的隊(duì)列的最前面,post方法總是插入到set后部的隊(duì)列的最后面
例一:
Matrix m = new Matrix(); m.setRotate(45); m.setTranslate(80, 80);
只有m.setTranslate(80, 80)有效,因?yàn)閙.setRotate(45);被清除.
例子二:
Matrix m = new Matrix(); m.setTranslate(80, 80); m.postRotate(45);
先執(zhí)行m.setTranslate(80, 80);后執(zhí)行m.postRotate(45);
例子三:
Matrix m = new Matrix(); m.setTranslate(80, 80); m.preRotate(45);
先執(zhí)行m.setTranslate(80, 80);后執(zhí)行m.preRotate(45);
例子四:
Matrix m = new Matrix(); m.preScale(2f,2f); m.preTranslate(50f, 20f); m.postScale(0.2f, 0.5f); m.postTranslate(20f, 20f);
執(zhí)行順序:m.preTranslate(50f, 20f)-->m.preScale(2f,2f)-->m.postScale(0.2f, 0.5f)-->m.postTranslate(20f, 20f)
注意:m.preTranslate(50f, 20f)比m.preScale(2f,2f)先執(zhí)行,因?yàn)樗榈搅岁?duì)列的最前端.
例子五:
Matrix m = new Matrix(); m.postTranslate(20, 20); m.preScale(0.2f, 0.5f); m.setScale(0.8f, 0.8f); m.postScale(3f, 3f); m.preTranslate(0.5f, 0.5f);
執(zhí)行順序:m.preTranslate(0.5f, 0.5f)-->m.setScale(0.8f, 0.8f)-->m.postScale(3f, 3f)
注意:m.setScale(0.8f, 0.8f)清除了前面的m.postTranslate(20, 20)和m.preScale(0.2f, 0.5f);
其它一些具體的方法舉例:
1、setTranslate(float ds,float dy):控制Matrix進(jìn)行平移。
2、setSkew(float kx,float ky,float px,float py):控制Matrix以px、py為軸心進(jìn)行傾斜。kx、ky為X、Y方向上的傾斜距離。
3、setSkew(float kx,float ky):控制Matrix進(jìn)行傾斜。kx、ky為X、Y方向上的傾斜距離。
4、setRotate(float degrees):控制Matrix進(jìn)行旋轉(zhuǎn),degrees控制旋轉(zhuǎn)的角度。
5、setRotate(float degrees,float px,float py):設(shè)置以px、py為軸心進(jìn)行旋轉(zhuǎn),degrees控制旋轉(zhuǎn)的角度。
6、setScale(float sx,float sy):設(shè)置Matrix進(jìn)行縮放,sx、sy控制X、Y方向上的縮放比例。
7、setScale(float sx,float sy,float px,float py):設(shè)置Matrix以px、py為軸心進(jìn)行縮放,sx、sy控制X、Y方向上的縮放比例。
寫在最后:
這里對圖片進(jìn)行移動(dòng),旋轉(zhuǎn)之類的處理,除了通過Matrix類,還可以通過Animation動(dòng)畫來實(shí)現(xiàn)
他們之間的不同點(diǎn)在于:
1.使用Matrix類的時(shí)候,圖片的移動(dòng)和旋轉(zhuǎn),只能在控件上面。這里面控件本身沒有動(dòng),控件里面的內(nèi)容動(dòng)了。在實(shí)際做的時(shí)候需要考慮控件本身的大小,因?yàn)槌霾糠植粫?huì)顯示。
2.使用Animation動(dòng)畫來實(shí)現(xiàn)的時(shí)候,動(dòng)的是控件本身。
- android中實(shí)現(xiàn)背景圖片顏色漸變方法
- Android編程之圖片顏色處理方法
- Android 圖片的顏色處理實(shí)例代碼
- Android實(shí)現(xiàn)的可以調(diào)整透明度的圖片查看器實(shí)例
- Android中利用matrix 控制圖片的旋轉(zhuǎn)、縮放、移動(dòng)
- Android裁剪圖片為圓形圖片的實(shí)現(xiàn)原理與代碼
- Android圖片特效:黑白特效、圓角效果、高斯模糊
- android 多點(diǎn)觸摸圖片縮放的具體實(shí)現(xiàn)方法
- Android實(shí)現(xiàn)圖片疊加效果的兩種方法
- Android開發(fā)中使用顏色矩陣改變圖片顏色,透明度及亮度的方法
相關(guān)文章
Android實(shí)現(xiàn)錄音功能實(shí)現(xiàn)實(shí)例(MediaRecorder)
本篇文章主要介紹了Android實(shí)現(xiàn)錄音的實(shí)例代碼(MediaRecorder),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07Android數(shù)據(jù)存儲(chǔ)幾種方式講解
在開發(fā)過程中,數(shù)據(jù)存取是較為頻繁的,今天我們來了解下android幾種常見的數(shù)據(jù)存取方式。在Android中,sharePreferences是一種輕量級的數(shù)據(jù)存儲(chǔ)方式,采用鍵值對的存儲(chǔ)方式,存儲(chǔ)少量數(shù)據(jù),支持基本類型的簡單數(shù)據(jù)存儲(chǔ)2022-12-12Android自定義View實(shí)現(xiàn)加載進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)加載進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android判斷后臺(tái)服務(wù)是否開啟的兩種方法實(shí)例詳解
這篇文章主要介紹了Android判斷后臺(tái)服務(wù)是否開啟的方法的相關(guān)資料,這里提供了兩種方法及實(shí)例,需要的朋友可以參考下2017-07-07Android adb logcat 命令查看日志詳細(xì)介紹
這篇文章主要介紹了Android adb logcat 命令詳細(xì)介紹的相關(guān)資料,這里對logcat 命令進(jìn)行了詳細(xì)介紹,并介紹了過濾日志輸出的知識(shí),需要的朋友可以參考下2016-12-12Android設(shè)置桌面背景圖片的實(shí)現(xiàn)方法
有時(shí)候我們需要用android設(shè)置桌面背景圖片,這里簡單分享下,方便需要的朋友2013-06-06Android 個(gè)人理財(cái)工具五:顯示賬單明細(xì) 上
本文主要介紹 Android 個(gè)人理財(cái)工具顯示賬單明細(xì),這里提供了示例代碼,和實(shí)現(xiàn)效果圖,幫助大家學(xué)習(xí)理解ListView的用法,有興趣的小伙伴可以參考下2016-08-08