關於用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面試題
- 請用canvas寫一個關於520浪漫表白的程式碼Canvas
- 關於重寫equals()和hashCode()的思考
- 方法的重寫
- 用 vue 寫小程式,基於 mpvue 框架重寫 weuiVue框架UI
- 關於程式碼複用
- 如何編寫高效的Android程式碼Android
- 關於HashMap的key重寫hashcode和equals的理解HashMap
- Android應用關閉,重啟Android
- 關於Clean Architecture在android中的應用Android
- 關於前端面試中常考的各種手寫程式碼題前端面試
- 重寫equals方法以及重寫tostring方法
- 用PHP編寫Android應用程式PHPAndroid
- java方法的神奇修改(重寫)Java
- 關於 Android 程式設計師最近的狀況Android程式設計師
- 幽默:無程式碼是編寫安全可靠的應用程式的最佳方法,教程入內!
- 方法重寫
- Android關於Typedarray的使用Android
- [譯] 重寫 loadView() 方法使 Swift 檢視程式碼更加簡潔ViewSwift
- 關於繼承、重寫、過載的易混淆之處的總結繼承
- 關於 dingo API 的疑問GoAPI
- 程式碼重構之法——方法重構分析
- 關於 Go 程式碼結構的思考Go
- 關於程式碼質量退化的思考
- 方法重置和重寫的區別
- JavaBean重寫Object類中的方法JavaBeanObject
- .Net Core——用程式碼寫程式碼?
- 關於 Angular 應用 Module 的 forRoot 方法的討論Angular
- 重構:改善既有程式碼的設計(第二版讀書筆記) - 重構、壞程式碼、寫好程式碼筆記
- 重構程式碼(應如寫詩)
- 突破Android P非SDK API限制的幾種程式碼實現AndroidAPI
- 用寫程式碼的方式來整理知識
- 天天灌水,來寫點關於程式語言的思考。
- 方法重寫(Override)IDE
- 關於對健壯性程式碼的理解
- Redpanda:用C++重寫的KafkaC++Kafka
- 十年程式設計師的告誡:千萬不要重寫程式碼!程式設計師
- 關於Vulkan應用程式執行時編譯GLSL Shader檔案的方法編譯
- 關於使用 SAP UI5 程式碼設定應用 theme 的技巧UI