Android draw Rect座標図

12805 ワード

先日ブログでandroid Canvasクラス紹介http://byandby.javaeye.com/blog/825330
中に入ってみることをお勧めします.そうしないと、下には続けられませんよ.私はやはりこの例のコードを貼ってみましょう.
 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       
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 } 

皆さんはこの例を見ていくつか疑問がありますか?まずここについて説明します
Javaコード
  • canvas.rotate(45.0f)  

  • 方法はキャンバスを回転させることを知っています.ここでは時計回りに回転することを示しています.実は私の疑問は下の2つのコードです
    Javaコード
  • //長方形
  • を描く
  • canvas.drawRect(new Rect(150, 75, 260, 120), mPaint);  
  • //裁断領域
  • を設定
  • canvas.clipRect(10, 10, 280, 260);  

  • パラメータに疑問がありますandroidはどのようにCanvasオブジェクトに矩形を描きますか?New Rect(150,75260120)では、これらのパラメータの数字はどのような値を示していますか?android長方形を描く座標の原点はどこですか?---スクリーンの左上隅で教えてあげます.では疑問を持ってandroidがキャンバスに矩形を描く方法を見てみましょう
    Javaコード
  • new Rect(150, 75, 260, 120)  

  • この構造方法には4つのパラメータが必要です.この4つのパラメータはどの位置を示していますか.この矩形を描く方法という4つのパラメータがそれぞれ表す意味を説明します.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でその4つの点のピクチャーの中の赤い部分を代表して私たちが描く矩形です.Android <wbr>draw <wbr>Rect <wbr>坐标图示(转)  canvas.clipRect(10,10,280,260)このキャンバスを裁断する方法のパラメータの意味は,我々のnew Rect(150,75,260,120)のパラメータの意味と同じである.ここで皆さんに一つの問題を説明します.次に、上の矩形です.
    Javaコード
  • new Rect(150,75,260,120)  

  • スクリーンの右下隅にどうやって置くべきですか?スクリーンの右側と下側と座標を並べていくらですか?私のスクリーンは320*480です.この矩形の座標は(210435320480)正しい結果になるはずですが、座標をこれに変更すると、実際にはこの矩形がスクリーンに消えてしまいます.最初は困惑して何が起こっているのか分からなかったが、私たちの画面のステータスバーとタイトルバーが全部で50の正しい座標を占めていることに気づいた(210385320430).私たちはやはり図の緑の矩形を見て、私たちが望んでいる効果です.Android <wbr>draw <wbr>Rect <wbr>坐标图示(转)この時点で画面の右下にあります.ここで疑問ですが、ステータスバーやタイトルバーが50を占めていても矩形の一番下の線の位置は480でしょう.これは間違いないですね.どうして430になったのですか.いいですね.私も何が起こっているのか分かりません.座標原点を下に移動して座標原点がステータスバーとタイトルバーのベースラインにあるのではないかと疑っています.私のところは推測にすぎません.もし達人が知っていたら教えてください.ありがとうございます.ところで、ここでは、ステータスバーとタイトルバーの高さhttp://blog.csdn.net/pilou5400/archive/2010/11/18/6018422.aspxを取得する方法を紹介します.