`
byandby
  • 浏览: 1697271 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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,75,260,120)里边这些参数 的数字指明了什么那些值?android 绘制一个矩形以哪里为坐标原点? ---》我现在就告诉大家 是以屏幕的左上角。 好 我们现在 就带着疑问来 看看 android到底怎么在画布上 绘制一个矩形

先说这句
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) 的参数含义是一样的。

     这里向大家说明一个问题 接着说吧 还是上边这个矩形
new Rect(150,75,260,120)
我们应该怎么把它放到屏幕的右下角,就是和屏幕的右侧和下侧都挨上   坐标是多少?我的屏幕是 320*480  按道理这个矩形的坐标应该是(210,435,320,480) 这其实 应该是正确的结果 ,但是如果把坐标改成这个 你运行一下 其实 这个矩形就消失在了屏幕上。 刚开始我困惑至极 也不知道怎么回事,后来发现 我们屏幕的 状态栏 和 标题栏 一共占了 50  正确的坐标应该是 (210,385,320,430);  我们还是来看张图 那个绿色的矩形 就是我们想要的效果。



这个时候它就在屏幕的右下角。 这里还是有疑问,就算 状态栏 和 标题栏 占去了 50 但是矩形最下面那条线 的位置应该还是 480啊 ! 这是没错的啊 怎么会变成 430 了 很好 我也不知道是怎么回事 我怀疑 是坐标原点 下移 坐标原点 在 状态栏和标题栏的底线。 我这里只是猜测,如果有高手知道 还请告知。谢谢。  哦 对了 这里有一个不错的例子 介绍 怎么获取 状态栏 和 标题栏的 高度 http://blog.csdn.net/pilou5400/archive/2010/11/18/6018422.aspx 大家 可以去看看。

  • 大小: 40.9 KB
  • 大小: 23.3 KB
6
1
分享到:
评论
2 楼 Flywhitewater 2014-11-13  
图不错     
1 楼 bigboy 2011-11-28  
谢谢 赐教了

相关推荐

    Android canvas drawBitmap方法详解及实例

    `drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)`是`drawBitmap()`方法的一个重载版本,其参数含义如下: 1. **Bitmap bitmap**: 这是你要绘制的位图对象,通常是从资源文件、内存缓存或者直接创建的...

    知识共享-Android_开发Rect(雷惊风).

    `Rect`类在Android开发中主要用于表示一个矩形区域,该类包含了四个整型成员变量:`left`、`top`、`right`和`bottom`,分别代表矩形左上角的横纵坐标及右下角的横纵坐标。这与Java标准库中的`Rectangle`类有所不同,...

    android实现画坐标图源码

    对于坐标图,开发者可能会使用`Canvas`类来绘制图形,`Paint`类来设置线条颜色和样式,以及`Rect`类来定义坐标轴的边界。此外,可能还会用到`Path`类来构建折线路径。 `res`目录则包含应用的资源文件,如布局文件...

    android坐标画矩形

    在Android开发中,坐标画矩形是一项基本的图形绘制任务,尤其在进行用户交互或游戏开发时非常常见。本课程设计旨在教你如何通过输入坐标在Android应用的画布上绘制矩形,并且提供了Eclipse IDE作为开发环境。下面将...

    通过创建一个位图的XY Chart来学习Android绘图类Rect

    通过创建一个位图的XY Chart来深入学习Android绘图类Rect、Paint、Bitmap与Canvas,是一种有效掌握Android图形处理机制的方式。在这个过程中,我们将重点理解这些核心类的作用以及它们之间的相互作用,从而能够构建...

    Android应用 坐标系详细介绍

    Android 应用坐标系详解 Android 坐标系是理解Android用户界面(UI)布局和交互的关键概念。它是一个三维坐标系统,其中Z轴指向屏幕外,X轴从左向右延伸,而Y轴则从屏幕顶部向下。这个坐标系决定了视图的位置和大小...

    Android-一个小的坐标转化工具可以将坐标点或其他的点转化到自定义的view上面

    在Android开发过程中,有时我们需要将屏幕坐标、物理坐标或者地图坐标等不同的坐标系统转换到自定义View上的像素坐标,以便进行精准的绘制或者交互。这个"Android-一个小的坐标转化工具"就是一个解决此类问题的实用...

    android Accessibility无障碍服务实现获取系统全局任何控件的名称和坐标信息

    总结起来,Android 的 Accessibility 服务为我们提供了一个强大且灵活的接口,可以获取到系统全局任何控件的名称和坐标信息。通过适当地配置服务并监听 AccessibilityEvent,开发者可以实现各种自定义功能,增强应用...

    Unity 屏幕坐标转RectTransform局部坐标

    Unity 屏幕坐标转RectTransform局部坐标 1.效果展示:https://blog.csdn.net/qq_26318597/article/details/131331751 2.示例场景:把鼠标的屏幕坐标转成Image的本地坐标,左下角(0,0)=》 右上角(1,1) 3.示例...

    android截屏和向屏幕发点击坐标

    本文将详细讲解如何实现Android设备的截屏操作,以及如何通过编程方式向屏幕发送点击坐标,模拟用户触摸事件。 一、Android截屏 1. **系统自带截屏**:Android设备通常都提供了快捷键进行截屏,通常是同时按下电源...

    Android判断touch事件点是否在view范围内的方法

    // 更新Rect对象的坐标,使其包含View在屏幕上的完整位置 mChangeImageBackgroundRect.left = location[0]; mChangeImageBackgroundRect.top = location[1]; mChangeImageBackgroundRect.right = ...

    VC++在屏幕坐标和窗口坐标之间转换

    在Windows编程中,坐标系统是理解用户界面交互的基础。VC++作为Microsoft的C++开发环境,经常用于构建桌面应用程序,这就涉及到屏幕坐标和窗口坐标的转换。屏幕坐标系统是整个显示器上的全局坐标系统,而窗口坐标...

    draw rect实现的圆形进度条

    本案例中,"draw rect实现的圆形进度条"是一个由zhouxing5311开发的开源项目,名为ZZCircleProgress。这个项目利用了Core Graphics框架中的`drawRect:`方法来绘制一个可定制的圆形进度条,它允许开发者自由地调整...

    unity 相对坐标与绝对坐标的转换

    在Unity 3D游戏开发中,坐标系统是基础概念之一,包括了绝对坐标和相对坐标。绝对坐标是指在全局空间中的位置,而相对坐标则是在父对象局部空间内的位置。理解这两种坐标系统的转换对于实现复杂的场景布局和物体运动...

    Android自定义View中Paint、Rect、Canvas介绍(一)

    上面的代码创建了一个Rect对象,并将其设置为一个矩形区域,左上角坐标为(0, 0),宽度和高度分别为width和height。 三、Canvas类 Canvas类是Android中的一种图形绘制类,主要用于实现各种图形的绘制工作。 ...

    rectbox_rectbox_decidevm6_matlab矩形绘图_绘图_matlab_

    `rectbox`函数的出现,简化了这个过程,使得用户可以直接指定矩形的边界坐标,提高了代码的可读性和效率。 在压缩包中,有两个文件:`rectbox.m`和`rectbox_test.m`。`rectbox.m`是`rectbox`函数的源代码,包含了...

    Python.Pyxel.Draw.Rect.20200331084747:矩形を描画する

    Pyxel.Draw.Rect矩形を描画する。演示特徴行7行!开発环境2020-03-30 4 Model B Rev 1.2 Buster 10.0 2019-09-26bash 5.0.3(1)-发布的Python 3.8.2 1.3.1$ uname -aLinux raspberrypi 4.19.97-v7l+ # 1294 SMP Thu...

    Rect类的使用

    首先,`Rect`类通常包含四个属性:`x`(左边缘坐标)、`y`(上边缘坐标)、`width`(矩形宽度)和`height`(矩形高度)。这些属性可以用来创建和定位矩形。例如,`Rect(10, 20, 30, 40)`表示一个左上角位于坐标(10, ...

    深入浅析Android坐标系统

    Android坐标系统是自定义控件开发中的核心概念之一,它涉及到UI元素的位置计算和交互处理。在Android系统中,坐标系被用来确定每个View在屏幕上的精确位置,这对于理解和实现复杂的布局以及动态动画至关重要。 首先...

    IntRect.rar_intrect

    在本压缩包"IntRect.rar_intrect"中,我们关注的是一个名为"IntRect"的特定模块,它是QT库在处理矩形整数坐标时的一个工具。下面我们将深入探讨这个"IntRect"类及其在QT中的应用。 "IntRect"通常代表一个矩形区域,...

Global site tag (gtag.js) - Google Analytics