目錄

縮放特效,在之前的基礎上,加上一個縮放特效
保存旋轉后的矩陣的值
public void setAngle(float angle, float x, float y, float z) {
//根據手機的相機進行旋轉矯正
Matrix.rotateM(matrix, 0, angle, x, y, z);
//將旋轉后的矩陣保存下來
for (int i = 0; i < 16; i++) {
rotateMatrix[i] = matrix[i];
}
}
核心部分,根據當前的幀數動態設定matrix的值
//這部分是用于縮放的變數
private float progress;
private int curFrame;
private int maxFrame = 14;//一輪14幀
private int midFrame = maxFrame / 2;//找到中間的那一幀,前面一半是方法,后面是縮小
private float maxScale = 0.3f;//最大縮放的比例
private float[] rotateMatrix = new float[16];//保存旋轉后的矩陣
//用于縮放的具體代碼計算
private void effectScale() {
//frame為當前幀數映射到縮放幀數的區間內
int frame = (curFrame++) % maxFrame;
if (frame <= midFrame) {//逐漸放大
progress = 1f * frame / midFrame;
} else {
progress = 2f - 1f * frame / midFrame;
}
float scale = 1f + maxScale * progress;
//旋轉后的矩陣賦值回來
for (int i = 0; i < 16; i++) {
matrix[i] = rotateMatrix[i];
}
//縮放
Matrix.scaleM(matrix, 0, scale, scale, scale);
}
在onDrawFrame中呼叫
@Override
public void onDrawFrame() {
//更新畫面紋理
surfaceTexture.updateTexImage();
//縮放特效
effectScale();
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/61470.html
標籤:其他
