關於用Android的API重寫drawRegion方法的程式碼

yangxi_001發表於2013-12-26

Android裡面沒有drawRegion只好重寫,

不廢話,上程式碼:

[java] view plaincopy
  1. public static void drawRegion(Canvas g,Bitmap bitmap, int x_src, int y_src, int width, int height, int transform,  
  2.                 int x_dest, int y_dest,int anchor){  
  3.           
  4.             Matrix matrix = new Matrix();  
  5.             Matrix mirror = new Matrix();  
  6.             Bitmap img = null;  
  7.               
  8.             Rect src = new Rect();  
  9.             src.left    = x_src;  
  10.             src.right   = x_src + width;  
  11.             src.top     = y_src;  
  12.             src.bottom  = y_src + height;  
  13.               
  14.             float mirrorArray[] = {  
  15.                 -100,  
  16.                  010,  
  17.                  001  
  18.             };  
  19.               
  20.             mirror.setValues(mirrorArray);  
  21.               
  22.               
  23.               
  24.             switch (transform) {   
  25.               case TRANS_NONE: {   
  26.                   break;   
  27.                }   
  28.                case TRANS_ROT90: {   
  29.                     matrix.preRotate(90);   
  30.                     img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);   
  31.                     break;   
  32.                 }   
  33.                 case TRANS_ROT180: {   
  34.                     matrix.preRotate(180);   
  35.                 img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);   
  36.                     break;   
  37.                 }   
  38.                 case TRANS_ROT270: {   
  39.                     matrix.preRotate(270);   
  40.                     img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);   
  41.                     break;   
  42.                 }   
  43.                 case TRANS_MIRROR: {   
  44.                 // TODO   
  45.                     matrix.postConcat(mirror);  
  46.                     img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);   
  47.                     break;   
  48.                 }   
  49.                 case TRANS_MIRROR_ROT90: {   
  50.                     // TODO   
  51.                     matrix.postConcat(mirror);  
  52.                     matrix.preRotate(90);   
  53.                     img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);                
  54.                   
  55.                     break;   
  56.                 }   
  57.                 case TRANS_MIRROR_ROT180: {   
  58.                 // TODO   
  59.                     matrix.postConcat(mirror);  
  60.                     matrix.preRotate(180);   
  61.                     img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);                    
  62.                     break;   
  63.                 }   
  64.                 case TRANS_MIRROR_ROT270: {   
  65.                 // TODO   
  66.                     matrix.postConcat(mirror);  
  67.                     matrix.preRotate(270);   
  68.                     img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);                
  69.                     break;   
  70.                 }   
  71.               
  72.             }  
  73.             g.drawBitmap(img, x_dest, y_dest, null);   
  74.     }  

 

這裡主要是利用了Matrix來處理。

drawBitmap裡面有對矩陣的支援。

 

小tips:在Matrix相關類裡分別有Preconcats matrix與Postconcats  matrix

Preconcats matrix相當於右乘矩陣,Postconcats  matrix相 當於左乘矩陣。

剛才google翻譯竟然木有,唉,專業用語。

 

另外,今兒又折騰了半天原來依稀記著碰到過,後來卻怎麼也折騰不好的問題。

 

問題是這樣兒的,我繼承了SurfaceView類,卻死活不調draw

後來發現

在Activity裡的OnCreate裡

[java] view plaincopy
  1. super.onCreate(savedInstanceState);  
  2. //setContentView(R.layout.main);//就是這句沒注掉,基礎啊,基礎,唉,回去仔細研究Android結構去!!!  
  3.   
  4. cGame game = new cGame(this);  
  5. setContentView(game);   
註釋部分出了問題,唉,基礎啊基礎,好長時間不用又忘了!!!

相關文章