關於用Android的API重寫drawRegion方法的程式碼
Android裡面沒有drawRegion只好重寫,
不廢話,上程式碼:
- public static void drawRegion(Canvas g,Bitmap bitmap, int x_src, int y_src, int width, int height, int transform,
- int x_dest, int y_dest,int anchor){
- Matrix matrix = new Matrix();
- Matrix mirror = new Matrix();
- Bitmap img = null;
- Rect src = new Rect();
- src.left = x_src;
- src.right = x_src + width;
- src.top = y_src;
- src.bottom = y_src + height;
- float mirrorArray[] = {
- -1, 0, 0,
- 0, 1, 0,
- 0, 0, 1
- };
- mirror.setValues(mirrorArray);
- switch (transform) {
- case TRANS_NONE: {
- break;
- }
- case TRANS_ROT90: {
- matrix.preRotate(90);
- img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);
- break;
- }
- case TRANS_ROT180: {
- matrix.preRotate(180);
- img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);
- break;
- }
- case TRANS_ROT270: {
- matrix.preRotate(270);
- img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);
- break;
- }
- case TRANS_MIRROR: {
- // TODO
- matrix.postConcat(mirror);
- img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);
- break;
- }
- case TRANS_MIRROR_ROT90: {
- // TODO
- matrix.postConcat(mirror);
- matrix.preRotate(90);
- img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);
- break;
- }
- case TRANS_MIRROR_ROT180: {
- // TODO
- matrix.postConcat(mirror);
- matrix.preRotate(180);
- img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);
- break;
- }
- case TRANS_MIRROR_ROT270: {
- // TODO
- matrix.postConcat(mirror);
- matrix.preRotate(270);
- img = Bitmap.createBitmap(bitmap, src.left, src.top, src.right, src.bottom, matrix, true);
- break;
- }
- }
- g.drawBitmap(img, x_dest, y_dest, null);
- }
這裡主要是利用了Matrix來處理。
drawBitmap裡面有對矩陣的支援。
小tips:在Matrix相關類裡分別有Preconcats matrix與Postconcats matrix
Preconcats matrix相當於右乘矩陣,Postconcats matrix相 當於左乘矩陣。
剛才google翻譯竟然木有,唉,專業用語。
另外,今兒又折騰了半天原來依稀記著碰到過,後來卻怎麼也折騰不好的問題。
問題是這樣兒的,我繼承了SurfaceView類,卻死活不調draw
後來發現
在Activity裡的OnCreate裡
- super.onCreate(savedInstanceState);
- //setContentView(R.layout.main);//就是這句沒注掉,基礎啊,基礎,唉,回去仔細研究Android結構去!!!
- cGame game = new cGame(this);
- setContentView(game);
相關文章
- Java 面試題關於方法的重寫Java面試題
- 關於繼承與重寫的面試程式設計題繼承面試程式設計
- 用 vue 寫小程式,基於 mpvue 框架重寫 weuiVue框架UI
- 關於寫非同步程式碼測試用例的一些思考非同步
- 關於重寫equals()和hashCode()的思考
- 寫程式碼的三重境界
- 關於百度地圖api的實用方法記錄地圖API
- 關於程式碼複用
- 關於爛程式碼的那些事 – 評價程式碼優劣的方法
- 關於重寫 v-model 的一點感想
- 關於HashMap的key重寫hashcode和equals的理解HashMap
- 編寫高效的Android程式碼Android
- Android使用程式碼實現關機/重啟Android
- java之方法的重寫Java
- 抵制程式碼重寫
- 編寫易於理解的程式碼
- 如何編寫高效的Android程式碼Android
- Android程式碼的書寫規範Android
- 自己寫的部分實用的程式碼
- java方法的神奇修改(重寫)Java
- 【iOS】category重寫方法的呼叫iOSGo
- 編寫適用於模擬器的 Linux 程式碼(轉)Linux
- 關於前端面試中常考的各種手寫程式碼題前端面試
- 用node.js寫的程式碼Node.js
- 方法重寫
- Android應用關閉,重啟Android
- 關於ListView的getView方法被多次重複呼叫的問題View
- 關於C++程式碼最佳化的方法總結(轉)C++
- SQL中關於NULL的程式碼SQLNull
- 關於繼承、重寫、過載的易混淆之處的總結繼承
- JavaBean重寫Object類中的方法JavaBeanObject
- 方法重置和重寫的區別
- 程式碼重構之法——方法重構分析
- 關於整合抽取程式重啟後的現象分析
- 用jQuery編寫出更好的程式碼jQuery
- android 系統重啟與關機:java 程式碼實現AndroidJava
- 重構程式碼(應如寫詩)
- 幽默:無程式碼是編寫安全可靠的應用程式的最佳方法,教程入內!