Android Draw Rect座標図


先日ブログでandroid Canvasクラスの紹介をしました
http://byandby.iteye.com/blog/825330皆さん、中に入ってみることをお勧めします.そうしないと、下は続けられませんよ.私はやはりこの例のコードを貼ってみましょう.
package com.yarin.android.Examples_05_04;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

public class GameView extends View implements Runnable {
	/*   Paint   */
	private Paint mPaint = null;

	public GameView(Context context) {
		super(context);
		/*      */
		mPaint = new Paint();

		/*      */
		new Thread(this).start();
	}

	public void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		/*         */
		canvas.drawColor(Color.BLACK);

		/*          */
		mPaint.setAntiAlias(true);

		/*        */
		canvas.clipRect(10, 10, 280, 260);

		/*       */
		canvas.save();
		/*      */
		canvas.rotate(45.0f);

		/*           */
		mPaint.setColor(Color.RED);
		canvas.drawRect(new Rect(15, 15, 140, 70), mPaint);

		/*         */
		canvas.restore();

		/*              */
		mPaint.setColor(Color.GREEN);
		canvas.drawRect(new Rect(150, 75, 260, 120), mPaint);
	}

	//     
	public boolean onTouchEvent(MotionEvent event) {
		return true;
	}

	//       
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		return true;
	}

	//       
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		return false;
	}

	public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
		return true;
	}

	public void run() {
		while (!Thread.currentThread().isInterrupted()) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				Thread.currentThread().interrupt();
			}
			//   postInvalidate            
			postInvalidate();
		}
	}
}

皆さんはこの例を見ていくつか疑問がありますか?まずここについて説明します
canvas.rotate(45.0f)
メソッドは、キャンバスを回転させることを知っています.ここでは、時計回りに回転していることを示しています.実は私の疑問は下の2つのコードです

//    
canvas.drawRect(new Rect(150, 75, 260, 120), mPaint);
//      
canvas.clipRect(10, 10, 280, 260);

パラメータに疑問がありますandroidはどのようにCanvasオブジェクトに矩形を描きますか?
New Rect(150,75260120)では、これらのパラメータの数字はどのような値を示していますか?android長方形を描く座標の原点はどこですか?---スクリーンの左上隅で教えてあげます.では疑問を持ってandroidがキャンバスに矩形を描く方法を見てみましょう
まずこの言葉を言います
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 Draw Rect 坐标图示
canvas.clipRect(10,10,280,260)このキャンバスを裁断する方法のパラメータの意味は,我々のnew Rect(150,75,260,120)のパラメータの意味と同じである.
ここで皆さんに一つの問題を説明します.次に、上の矩形です.
new Rect(150,75,260,120)
スクリーンの右下隅に置くにはどうすればいいですか.スクリーンの右側と下側の座標はいくらですか.私のスクリーンは320*480です.この矩形の座標は(210435320480)正しい結果になるはずですが、座標をこれに変更すると、実際にはこの矩形がスクリーンに消えてしまいます.最初は困惑して何が起こっているのか分からなかったが、私たちの画面のステータスバーとタイトルバーが全部で50の正しい座標を占めていることに気づいた(210385320430).私たちはやはり図の緑の矩形を見て、私たちが望んでいる効果です.
android Draw Rect 坐标图示
このとき画面の右下にあります.ここで疑問ですが、ステータスバーやタイトルバーが50を占めていても矩形の一番下の線の位置は480でしょう.これは間違いないですね.どうして430になったのですか.いいですね.私も何が起こっているのか分かりません.座標原点を下に移動して座標原点がステータスバーとタイトルバーのベースラインにあるのではないかと疑っています.私のところは推測にすぎません.もし達人が知っていたら教えてください.ありがとうございます.ああ、ここでは、ステータスバーとタイトルバーの高さを取得する方法を紹介します.
http://blog.csdn.net/pilou5400/archive/2010/11/18/6018422.aspxみんな行ってみてください.