歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android matrix camera處理圖片繞X軸Y軸翻轉(類似3D效果)

Android matrix camera處理圖片繞X軸Y軸翻轉(類似3D效果)

日期:2017/3/1 10:45:23   编辑:Linux編程

Android中實現圖片繞X軸、Y軸、Z軸翻轉可以使用matrix和camera,類似3D效果

具體參見代碼:

  1. public class FlipImgEffectView extends View {
  2. private Context context ;
  3. private Bitmap showBmp ;
  4. private Matrix matrix ; //作用矩陣
  5. private Camera camera ;
  6. private int deltaX , deltaY ; //翻轉角度差值
  7. private int centerX , centerY ; //圖片中心點
  8. public FlipImgEffectView(Context context) {
  9. super(context);
  10. this.context = context ;
  11. initData();
  12. }
  13. private void initData(){
  14. showBmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.flower);
  15. centerX = showBmp.getWidth()/2 ;
  16. centerY = showBmp.getHeight()/2 ;
  17. matrix = new Matrix();
  18. camera = new Camera();
  19. }
  20. int lastMouseX ;
  21. int lastMouseY ;
  22. @Override
  23. public boolean dispatchTouchEvent(MotionEvent event) {
  24. int x = (int) event.getX();
  25. int y = (int) event.getY();
  26. switch(event.getAction()) {
  27. case MotionEvent.ACTION_DOWN:
  28. lastMouseX = x ;
  29. lastMouseY = y ;
  30. break;
  31. case MotionEvent.ACTION_MOVE:
  32. int dx = x - lastMouseX ;
  33. int dy = y - lastMouseY ;
  34. deltaX += dx ;
  35. deltaY += dy ;
  36. break;
  37. }
  38. invalidate();
  39. return true;
  40. }
  41. @Override
  42. protected void onDraw(Canvas canvas) {
  43. camera.save();
  44. //繞X軸翻轉
  45. camera.rotateX(-deltaY);
  46. //繞Y軸翻轉
  47. camera.rotateY(deltaX);
  48. //設置camera作用矩陣
  49. camera.getMatrix(matrix);
  50. camera.restore();
  51. //設置翻轉中心點
  52. matrix.preTranslate(-this.centerX, -this.centerY);
  53. matrix.postTranslate(this.centerX, this.centerY);
  54. canvas.drawBitmap(showBmp, matrix, null);
  55. }
  56. }

效果如圖:


Copyright © Linux教程網 All Rights Reserved