-----------------------------------
1. Matrix 使用方法:
-----------------------------------
* 重點注意事項:
1. Matrix中带有pre, post的函数需要考虑先后顺序,不然的话你会发现可能坐标位置不是你想要的。
Matrix的基本操作包括:+、*。Matrix的乘法不滿足交換律,也就是說A*B ≠B*A。
Preconcats matrix相當於右乘矩陣,Postconcats matrix相當於左乘矩陣。
參考資料:
2. 有一种更简便的方法,叫系统帮我们计算:
setConcat(Matrix a, Matrix b)
ex:
Matrix mRotateMatrix = new Matrix(); //控制旋转
Matrix mScaleMatrix = new Matrix(); //控制缩放
Matrix mSkewMatrix = new Matrix(); //控制倾斜
Matrix mPosMatrix = new Matrix(); //控制坐标
Matrix mMatrix = new Matrix(); //合并
mMatrix.setConcat(mRotateMatrix, mScaleMatrix);
mMatrix.setConcat(mMatrix, mSkewMatrix);
mMatrix.setConcat(mMatrix, mPosMatrix);
canvas.drawBitmap(mBitmap, mMatrix, mPaint);
3. Public Constructors:
Matrix()、Matrix(Matrix src)
4. 將 Matrix 結果放置 Rect 矩形中:
首先得到图片的宽为width,高为height,你使用的matrix为m:
RectF rect = new RectF(0, 0, width, height);
m.mapRect(rect);
这样rect.left,rect.right,rect.top,rect.bottom分别就就是当前屏幕离你的图片的边界的距离。
而这样你要的点(0,0)其实就是界面的左上角(rect.left,rect.top)
[Android界面] 请教高手Matrix中的mapRect方法如何使用:http://www.eoeandroid.com/thread-113930-1-1.html
5. 顏色矩陣 ColorMatrix - 用於調整圖片色調、慮色等顏色風格調整:
顏色矩陣M是一個5*4的矩陣,其一維數組m:
透過矩陣調整顏色的色偏:
EX:將變化量 array 設定至 ColorMatrix中,並用 canvas 配合 Paint 來完成 ColorFilter 效果。
Paint mPaint = new Paint(); //新建畫筆對象
canvas.drawBitmap(mBitmap, 0, 0, mPaint); //描畫(原始圖片)
ColorMatrix mColorMatrix = new ColorMatrix(); //新建顏色矩陣對象
mColorMatrix.set(array); //設置顏色矩陣的值
mPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix)); //設置畫筆顏色過滤器
canvas.drawBitmap(mBitmap, 0, 0, mPaint); //描畫(處理後的圖片)
參考資料:
6. 旋转:
- 围绕点px, py 旋转 degrees度,
- 如果没设置坐标,默认以0,0点旋转.
setRotate(float degrees)、setRotate(float degrees, float px, float py) 7. 缩放,翻转:
- 以点px,py为原点缩放 >=0 1为正常大小
- 如果是负数,图形就会翻转
- 如果没设置原点坐标,默认以0,0点缩放(如果发现图片不见了,检查一下是不是翻转出了屏幕)
setScale(float sx, float sy)、setScale(float sx, float sy, float px, float py)
8. 倾斜: - 以点px,py为原点倾斜
- 如果没有设置原点,则以0,0点为原点.
setSkew(float kx, float ky, float px, float py)、setSkew(float kx, float ky)
9. 坐标:
- 图片移动到某一个位置
setTranslate(float dx, float dy)
10. 重製:
- Matrix 會壘加,需要reset來算新的座標
matrix.reset();
EX:
- 想要旋转45度,然后平移到100,100的位置需要
Method 1)
Matrix matrix = new Matrix();
matrix.postRotate(45);
matrix.postTranslate(100, 100);
Method 2)
Matrix matrix = new Matrix();
matrix.setTranslate(100, 100);
matrix.preRotate(45);
參考資料:
EX:
- 旋轉、縮放和傾斜都可以圍繞一個中心點進行
-----------------------------------
2. Rect 使用方法:
-----------------------------------
* 重點注意事項:
Rect类与RectF类(android.graphics.RectF)的区别在於,兩者分别是:int、float类型的精準度
Public Constructors:
Rect(int left, int top, int right, int bottom)、Rect(Rect r)
常用參數:
(int) centerX()、centerY()
(float) exactCenterX()、exactCenterY()
(int) height()、width()
常用方法:
- 移動
offset(int dx, int dy):该矩阵在x轴和y轴分别发生的偏移量(很有用,可以上下移动矩阵)
- 檢查是否在範圍內(可用於點擊事件)
(boolean) contains(int x, int y):是否包含(x,y)点
(boolean) contains(int left, int top, int right, int bottom):是否包含(int left, int top, int right, int bottom)矩阵
(boolean) contains(Rect r)
- 加入/插入一個或多個矩型
inset(int dx, int dy):Inset the rectangle by (dx,dy).
intersect(Rect r)
intersect(int left, int top, int right, int bottom)
intersects(int left, int top, int right, int bottom)
intersects(Rect a, Rect b)
EX:
new Rect(150, 75, 260, 120) 左上角的坐标是(150,75),右下角的坐标是(260,120)
參考資料:
|
2015年11月29日 星期日
Matrix, Rect
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言