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. }  

效果如图:


 

相关内容