android Draw Rect 座標圖示

參考地址  http://byandby.iteye.com/blog/826230android

 

  前兩天在博客發了在例子 android Canvas類介紹  http://byandby.iteye.com/blog/825330  建議你們 點進去 看一看 否則下邊沒辦法 繼續啊。 我仍是把這個例子的代碼貼出來 你們一塊兒看看吧。 canvas

Java代碼   收藏代碼
  1. package com.yarin.android.Examples_05_04;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.graphics.Paint;  
  7. import android.graphics.Rect;  
  8. import android.view.KeyEvent;  
  9. import android.view.MotionEvent;  
  10. import android.view.View;  
  11.   
  12. public class GameView extends View implements Runnable {  
  13.     /* 聲明Paint對象 */  
  14.     private Paint mPaint = null;  
  15.   
  16.     public GameView(Context context) {  
  17.         super(context);  
  18.         /* 構建對象 */  
  19.         mPaint = new Paint();  
  20.   
  21.         /* 開啓線程 */  
  22.         new Thread(this).start();  
  23.     }  
  24.   
  25.     public void onDraw(Canvas canvas) {  
  26.         super.onDraw(canvas);  
  27.   
  28.         /* 設置畫布的顏色 */  
  29.         canvas.drawColor(Color.BLACK);  
  30.   
  31.         /* 設置取消鋸齒效果 */  
  32.         mPaint.setAntiAlias(true);  
  33.   
  34.         /* 設置裁剪區域 */  
  35.         canvas.clipRect(10, 10, 280, 260);  
  36.   
  37.         /* 線鎖定畫布 */  
  38.         canvas.save();  
  39.         /* 旋轉畫布 */  
  40.         canvas.rotate(45.0f);  
  41.   
  42.         /* 設置顏色及繪製矩形 */  
  43.         mPaint.setColor(Color.RED);  
  44.         canvas.drawRect(new Rect(15, 15, 140, 70), mPaint);  
  45.   
  46.         /* 解除畫布的鎖定 */  
  47.         canvas.restore();  
  48.   
  49.         /* 設置顏色及繪製另外一個矩形 */  
  50.         mPaint.setColor(Color.GREEN);  
  51.         canvas.drawRect(new Rect(150, 75, 260, 120), mPaint);  
  52.     }  
  53.   
  54.     // 觸筆事件  
  55.     public boolean onTouchEvent(MotionEvent event) {  
  56.         return true;  
  57.     }  
  58.   
  59.     // 按鍵按下事件  
  60.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  61.         return true;  
  62.     }  
  63.   
  64.     // 按鍵彈起事件  
  65.     public boolean onKeyUp(int keyCode, KeyEvent event) {  
  66.         return false;  
  67.     }  
  68.   
  69.     public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {  
  70.         return true;  
  71.     }  
  72.   
  73.     public void run() {  
  74.         while (!Thread.currentThread().isInterrupted()) {  
  75.             try {  
  76.                 Thread.sleep(100);  
  77.             } catch (InterruptedException e) {  
  78.                 Thread.currentThread().interrupt();  
  79.             }  
  80.             // 使用postInvalidate能夠直接在線程中更新界面  
  81.             postInvalidate();  
  82.         }  
  83.     }  
  84. }  



不知道你們看完這個例子 有沒有 有一些疑問?首先跟你們說明一下 這裏 這個post

Java代碼   收藏代碼
  1. canvas.rotate(45.0f)  

方法 咱們都知道它是旋轉畫布 這裏提示一下 它是順時針旋轉。 其實個人疑問就是 下邊這2句代碼 

this

Java代碼   收藏代碼
  1. //繪製矩形  
  2. canvas.drawRect(new Rect(150, 75, 260, 120), mPaint);  
  3. //設置裁剪區域  
  4. canvas.clipRect(10, 10, 280, 260);  


我對它們的參數有些疑問 我不知道 android 它是怎麼在一個 Canvas對象上 繪製出一個矩形?new Rect(150,75,260,120)裏邊這些參數 的數字指明瞭什麼那些值?android 繪製一個矩形以哪裏爲座標原點? ---》我如今就告訴你們 是以屏幕的左上角。 好 咱們如今 就帶着疑問來 看看 android到底怎麼在畫布上 繪製一個矩形 

先說這句spa

Java代碼   收藏代碼
  1. new Rect(150, 75, 260, 120)  

  這個構造方法須要四個參數這四個參數 指明瞭什麼位置 ?咱們就來解釋怎麼畫 這個 矩形 
這四個 參數 分別表明的意思是: left   top   right   bottom  上下左右唄。啊,不是 是 左 上 右 下。 下面給你們解釋  
left : 矩形左邊的X座標   150        ---->圖片中的A點 
top:    矩形頂部的Y座標    75         ---->圖片中的B點 
right :  矩形右邊的X座標    260       ----->圖片中的C點 
bottom: 矩形底部的Y座標  120     ------->圖片中的D點 

不知道你們到這裏 能不能立刻就能想象出 這個矩形應該在屏幕的什麼位置 我是不能 就在紙上畫了畫 下邊來張圖 我模擬器的 屏幕是 320*480 我也是 畫一個大概的位置 主要是明白 那幾個點在什麼地方。 在圖中 我分別以 A B  C D 表明 那四個點  圖片中紅色的部分就是咱們要畫的矩形。 

 

canvas.clipRect(10, 10, 280, 260) 這個裁剪畫布的方法 的參數含義和 咱們new Rect(150, 75, 260, 120) 的參數含義是同樣的。 

     這裏向你們說明一個問題 接着說吧 仍是上邊這個矩形線程

Java代碼   收藏代碼
  1. new Rect(150,75,260,120)  

咱們應該怎麼把它放到屏幕的右下角,就是和屏幕的右側和下側都捱上   座標是多少?個人屏幕是 320*480  按道理這個矩形的座標應該是(210,435,320,480) 這其實 應該是正確的結果 ,可是若是把座標改爲這個 你運行一下 其實 這個矩形就消失在了屏幕上。 剛開始我困惑至極 也不知道怎麼回事,後來發現 咱們屏幕的 狀態欄 和 標題欄 一共佔了 50  正確的座標應該是 (210,385,320,430);  咱們仍是來看張圖 那個綠色的矩形 就是咱們想要的效果。

 

這個時候它就在屏幕的右下角。 這裏仍是有疑問,就算 狀態欄 和 標題欄 佔去了 50 可是矩形最下面那條線 的位置應該仍是 480啊 ! 這是沒錯的啊 怎麼會變成 430 了 很好 我也不知道是怎麼回事 我懷疑 是座標原點 下移 座標原點 在 狀態欄和標題欄的底線。 我這裏只是猜想,若是有高手知道 還請告知。謝謝。  哦 對了 這裏有一個不錯的例子 介紹 怎麼獲取 狀態欄 和 標題欄的 高度rest

相關文章
相關標籤/搜索