圖片的3D翻轉(zhuǎn)借助的是android.graphics.Camera類(lèi)來(lái)實(shí)現(xiàn)的缘琅。理論上來(lái)說(shuō)應(yīng)該也可以通過(guò)矩陣變換來(lái)實(shí)現(xiàn)枫虏,希望有高手能夠指出擎场。下面附上代碼:
import android.graphics.Camera;
private Camera camera;
camera = new Camera();
/**
* 翻轉(zhuǎn)圖片
*
* @param isLeftOrRight
*/
private void roatePicture(boolean isLeftOrRight, Bitmap bitmap) {
camera.save();
Matrix matrix = new Matrix();
// rotate
if (isLeftOrRight) {
camera.rotateY(180);
} else {
camera.rotateX(180);
}
camera.getMatrix(matrix);
// 恢復(fù)到之前的初始狀態(tài)意系。
camera.restore();
// 設(shè)置圖像處理的中心點(diǎn)
matrix.preTranslate(bitmap.getWidth() >> 1, bitmap.getHeight() >> 1);
//? ? matrix.preSkew(10, 10);
matrix.postTranslate(bitmap.getWidth(), bitmap.getHeight());
// matrix.postSkew(skewX, skewY);
// 直接setSkew()钾腺,則前面處理的rotate()徙垫、translate()等等都將無(wú)效。
// matrix.setSkew(skewX, skewY);
// 2.通過(guò)矩陣生成新圖像(或直接作用于Canvas)
Bitmap newBit = null;
try {
// 經(jīng)過(guò)矩陣轉(zhuǎn)換后的圖像寬高有可能不大于0放棒,此時(shí)會(huì)拋出IllegalArgumentException
newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
} catch (IllegalArgumentException iae) {
iae.printStackTrace();
}
if (newBit != null) {
//? ?? ?? ?? ?show_image.mImageView.setLayout(false);
show_image.setImageBitmap(newBit);
tempBitmap = newBit;
}
}