`
yinter
  • 浏览: 243991 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android绘图坐标

阅读更多
在android中,手机的屏幕大少为320*480,原点坐标在左上角(0,0),在绘制图形时一定要非常清楚要绘制的图形对坐标转换的关系。

简单的图形如,直线,画点,画圆大家可能不会有什么问题,但如果遇到复杂图形或图形旋转等情况时,比较游戏俄罗斯方块中,对不同组合的方块进行变换时,涉及到很多坐标变换情况,如果不是完全清楚的话,很难编码了。

如下:


引用
public int[][] rotateStone(int[][] currentPosition) {
int[][] newPosition = new int[4][2];
int x, y;
switch (blockID) {
case 2:
if (rotatePosition == 0) {//一横变一竖
x = currentPosition[3][0];
y = currentPosition[3][1];
newPosition[0][0] = x - 3;
newPosition[0][1] = y;
newPosition[1][0] = x - 2;
newPosition[1][1] = y;
newPosition[2][0] = x - 1;
newPosition[2][1] = y;
newPosition[3][0] = x;
newPosition[3][1] = y;
rotatePosition = 1;
} else {//反之
x = currentPosition[3][0];
y = currentPosition[3][1];
newPosition[0][0] = x;
newPosition[0][1] = y - 3;
newPosition[1][0] = x;
newPosition[1][1] = y - 2;
newPosition[2][0] = x;
newPosition[2][1] = y - 1;
newPosition[3][0] = x;
newPosition[3][1] = y;
rotatePosition = 0;
}
return newPosition;
case 3:
if (rotatePosition == 0) {//左T
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x;
newPosition[0][1] = y - 1;
newPosition[1][0] = x;
newPosition[1][1] = y + 1;
newPosition[2][0] = x;
newPosition[2][1] = y;
newPosition[3][0] = x + 1;
newPosition[3][1] = y;
rotatePosition = 1;
} else if (rotatePosition == 1) {//上T
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x;
newPosition[0][1] = y + 1;
newPosition[1][0] = x - 1;
newPosition[1][1] = y;
newPosition[2][0] = x;
newPosition[2][1] = y;
newPosition[3][0] = x + 1;
newPosition[3][1] = y;
rotatePosition = 2;
} else if (rotatePosition == 2) {//右T
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x;
newPosition[0][1] = y - 1;
newPosition[1][0] = x - 1;
newPosition[1][1] = y;
newPosition[2][0] = x;
newPosition[2][1] = y;
newPosition[3][0] = x;
newPosition[3][1] = y + 1;
rotatePosition = 3;
} else if (rotatePosition == 3) {//下T
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x - 1;
newPosition[0][1] = y;
newPosition[1][0] = x + 1;
newPosition[1][1] = y;
newPosition[2][0] = x;
newPosition[2][1] = y;
newPosition[3][0] = x;
newPosition[3][1] = y - 1;
rotatePosition = 0;
}
return newPosition;
case 4:
if (rotatePosition == 0) {//上右7
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x;
newPosition[0][1] = y;
newPosition[1][0] = x + 1;
newPosition[1][1] = y;
newPosition[2][0] = x + 2;
newPosition[2][1] = y;
newPosition[3][0] = x + 2;
newPosition[3][1] = y - 1;
rotatePosition = 1;
} else if (rotatePosition == 1) {//左上T
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x - 1;
newPosition[0][1] = y - 2;
newPosition[1][0] = x;
newPosition[1][1] = y - 2;
newPosition[2][0] = x;
newPosition[2][1] = y - 1;
newPosition[3][0] = x;
newPosition[3][1] = y;
rotatePosition = 2;
} else if (rotatePosition == 2) {//下左7
x = currentPosition[1][0];
y = currentPosition[1][1];
newPosition[0][0] = x - 2;
newPosition[0][1] = y + 1;
newPosition[1][0] = x - 2;
newPosition[1][1] = y;
newPosition[2][0] = x - 1;
newPosition[2][1] = y;
newPosition[3][0] = x;
newPosition[3][1] = y;
rotatePosition = 3;
} else if (rotatePosition == 3) {//左上
x = currentPosition[1][0];
y = currentPosition[1][1];
newPosition[0][0] = x;
newPosition[0][1] = y;
newPosition[1][0] = x;
newPosition[1][1] = y + 1;
newPosition[2][0] = x;
newPosition[2][1] = y + 2;
newPosition[3][0] = x + 1;
newPosition[3][1] = y + 2;
rotatePosition = 0;
}
return newPosition;
case 5:
if (rotatePosition == 0) {
x = currentPosition[1][0];
y = currentPosition[1][1];
newPosition[0][0] = x - 2;
newPosition[0][1] = y - 1;
newPosition[1][0] = x - 1;
newPosition[1][1] = y - 1;
newPosition[2][0] = x;
newPosition[2][1] = y - 1;
newPosition[3][0] = x;
newPosition[3][1] = y;
rotatePosition = 1;
} else if (rotatePosition == 1) {
x = currentPosition[0][0];
y = currentPosition[0][1];
newPosition[0][0] = x;
newPosition[0][1] = y;
newPosition[1][0] = x + 1;
newPosition[1][1] = y;
newPosition[2][0] = x;
newPosition[2][1] = y + 1;
newPosition[3][0] = x;
newPosition[3][1] = y + 2;
rotatePosition = 2;
} else if (rotatePosition == 2) {
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x;
newPosition[0][1] = y;
newPosition[1][0] = x;
newPosition[1][1] = y + 1;
newPosition[2][0] = x + 1;
newPosition[2][1] = y + 1;
newPosition[3][0] = x + 2;
newPosition[3][1] = y + 1;
rotatePosition = 3;
} else if (rotatePosition == 3) {
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x;
newPosition[0][1] = y;
newPosition[1][0] = x + 1;
newPosition[1][1] = y;
newPosition[2][0] = x + 1;
newPosition[2][1] = y - 1;
newPosition[3][0] = x + 1;
newPosition[3][1] = y - 2;
rotatePosition = 0;
}
return newPosition;
case 6:
if (rotatePosition == 0) {
x = currentPosition[2][0];
y = currentPosition[2][1];
newPosition[0][0] = x - 1;
newPosition[0][1] = y;
newPosition[1][0] = x;
newPosition[1][1] = y + 1;
newPosition[2][0] = x;
newPosition[2][1] = y;
newPosition[3][0] = x + 1;
newPosition[3][1] = y + 1;
rotatePosition = 1;
} else {
x = currentPosition[2][0];
y = currentPosition[2][1];

newPosition[0][0] = x;
newPosition[0][1] = y - 1;
newPosition[1][0] = x - 1;
newPosition[1][1] = y;
newPosition[2][0] = x;
newPosition[2][1] = y;
newPosition[3][0] = x - 1;
newPosition[3][1] = y + 1;
rotatePosition = 0;
}
return newPosition;
case 7:
if (rotatePosition == 0) {
x = currentPosition[2][0];
y = currentPosition[2][1];

newPosition[0][0] = x - 1;
newPosition[0][1] = y - 1;
newPosition[1][0] = x - 1;
newPosition[1][1] = y;
newPosition[2][0] = x;
newPosition[2][1] = y;
newPosition[3][0] = x;
newPosition[3][1] = y + 1;
rotatePosition = 1;
} else {
x = currentPosition[2][0];
y = currentPosition[2][1];

newPosition[0][0] = x + 1;
newPosition[0][1] = y;
newPosition[1][0] = x - 1;
newPosition[1][1] = y + 1;
newPosition[2][0] = x;
newPosition[2][1] = y;
newPosition[3][0] = x;
newPosition[3][1] = y + 1;
rotatePosition = 0;
}
return newPosition;
default:
return currentPosition;

}

}


以上代码就是俄罗斯方块中的图形变换。

这是其一,另外还要找准其旋转坐标点,方程变换。

(x,y), (x+1,y),(x+2, y)即为向屏幕x轴移动,(x,y),(x,y+1),(x,y+2)即为向屏幕y轴移动,其它一此类推。
分享到:
评论

相关推荐

    Android-CoordinateAxisChart在Android绘制坐标轴函数图像

    "Android-CoordinateAxisChart在Android绘制坐标轴函数图像"这个项目专注于利用自定义视图来实现坐标轴图表的绘制,这对于数据分析、科学计算或统计展示的应用非常有用。下面将详细介绍如何在Android中创建并使用`...

    Android OpenGL ES 绘制三维/空间坐标系透明

    在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程涉及到几个关键的概念和技术。 首先,我们要理解OpenGL ES中的坐标系。OpenGL ES采用右手坐标系,其中X轴正...

    Android绘图技巧Demo

    2. **绘图坐标系统**:理解Android的左下角为原点的坐标系统至关重要,这直接影响到绘图的位置和大小。 3. **绘图路径(Path)**:Path对象可以用来绘制复杂的几何形状,通过addRect、addCircle、addPath等方法,可以...

    Android 根据坐标判断扇形点击区域

    在Android开发中,有时我们需要实现根据用户触摸屏幕的坐标来判断其点击的是哪个特定的图形区域,例如将一个圆分成四个扇形区域。这个任务在创建互动式UI或者游戏时非常常见。本篇将深入探讨如何实现“Android根据...

    android实现画坐标图源码

    总结来说,这个源码实例涵盖了Android图形编程的基础,包括自定义View、Canvas绘图、触摸事件处理以及资源管理等关键概念。通过深入研究和理解这个源码,开发者可以学习到如何在Android应用中实现自己的数据可视化...

    android 绘图 简单演示

    同时,也可能涉及Matrix的使用,Matrix可以对绘图坐标进行变换,实现旋转、缩放、平移等效果。 Android绘图还可以结合SurfaceView或SurfaceHolder,实现实时动态的图形渲染,这对于游戏和动画等场景非常有用。...

    android绘图 自定义组件

    Android绘图与自定义组件的结合,能够让我们创造出独具特色的交互效果和视觉表现。以下将详细阐述这两个重要概念及其应用。 1. Android绘图基础 - Canvas与Paint:Canvas是绘制图形的基础,它提供了各种画图方法,...

    Android绘图实现

    本文将深入探讨Android绘图实现的相关知识点,包括基础概念、核心类、API以及实践技巧。 一、基础概念 1. Canvas与Bitmap:Canvas是Android绘图的主要工作台,你可以在这个画布上绘制各种图形。而Bitmap则可以看作...

    绘图android

    在Android平台上,开发一款简单的涂鸦绘图应用是一项常见的任务,尤其对于初学者来说,它可以帮助理解Android...通过这个项目,开发者不仅可以掌握Android绘图的基础,还能了解到如何处理用户输入和实现自定义视图。

    Android应用 坐标系详细介绍

    自定义View时,理解坐标系至关重要,因为许多关键的绘图和事件处理逻辑都涉及到坐标计算。例如,重写`onDraw()`方法时,你需要使用`Canvas`对象提供的方法(如`drawRect()`, `drawCircle()`),这些方法接受的参数...

    Android获取用户点击的坐标

    在绘图应用中,可以根据坐标来绘制线条或形状。 ### 示例代码分析 以下是一个简单的示例,展示了如何在`AbsoluteLayout` Activity中实现上述功能: ```java public class AbsoluteLayout extends Activity { ...

    Android绘图基础

    2. **绘图坐标系统**:Android的绘图坐标系统原点位于屏幕左上角,x轴向右延伸,y轴向下延伸。你可以使用`translate()`方法改变当前坐标系的位置,`scale()`方法缩放坐标系,`rotate()`方法旋转坐标系,以及`skew()`...

    Android 支持滚动的自定义坐标系

    在Android开发中,有时我们需要创建个性化的视图来满足特定的数据显示需求,比如自定义的坐标系用于绘制折线图。这个"Android 支持滚动的自定义坐标系"项目就是为了实现这样一个功能,允许用户根据自己的需求定义...

    Android Canvas绘图Demo

    本篇将深入探讨`Android Canvas绘图`的相关知识点,包括基本概念、常用方法以及实际应用。 一、Canvas基础 1. `Canvas`对象:在Android中,`Canvas`是绘画的基础,它就像一块画布,我们可以在上面绘制各种元素。...

    Android绘图介绍-基本图形描画

    Android绘图的核心类是`Canvas`,它提供了在各种表面上绘制的基本操作。`Canvas`对象就像一个画布,你可以在这个画布上画出你的图形。而`Paint`对象则负责设置颜色、样式和字体等绘图属性,就像是你的画笔和颜料。...

    android绘图-sin曲线绘制

    首先,我们需要了解Android的绘图基础。Android提供了Canvas类,它是一个画布,可以在这个画布上进行各种图形绘制操作。我们通常会在View或SurfaceView的onDraw()方法中使用Canvas来完成绘图。以下是一个简单的...

    Android绘图

    在这个“Android绘图”的示例中,我们主要关注如何利用Canvas类和Paint类来绘制复杂的图形,例如这里提到的Android机器人。下面我们将深入探讨这两个核心类以及它们在自定义绘图中的应用。 首先,Canvas是Android...

    Android自定义View,View中的原点坐标相关问题

    本文将深入探讨Android View中的原点坐标相关问题,这对于理解和优化自定义View的绘制至关重要。 首先,理解Android视图坐标系统是关键。在Android中,每个View都有自己的坐标系统,其原点((0,0))位于View的左上...

    android之简易绘图板

    在Android平台上,开发一个简易的绘图板是一个常见的需求,特别是在构建教育、创意或娱乐类应用时。这个“android之简易绘图板”项目显然旨在提供一个基础的绘画功能,让用户能够在屏幕上自由绘制图形和线条。然而,...

    Android绘图机制与处理技巧(三)——Android图像处理之图形特效处理

    首先,我们来理解Android的绘图机制。Android的绘图过程基于Canvas和Paint对象。Canvas提供了画布,可以在此上绘制各种形状、文本和位图,而Paint则定义了绘制的样式,如颜色、线条宽度、阴影等。开发者可以通过调用...

Global site tag (gtag.js) - Google Analytics