歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

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

具體參見代碼:

 

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

效果如圖:


 

Copyright © Linux教程網 All Rights Reserved