public
class
Shape
extends
Graphics2DActivity {
private
int
menuOption;
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
registerForContextMenu(graphic2dView);
}
@Override
protected
void
drawImage() {
switch
(menuOption) {
case
R.id.mnuOval:
drawOval();
break
;
case
R.id.mnuPear:
drawPear();
break
;
case
R.id.mnuShape2DDemo:
drawShape2D();
break
;
default
:
drawOval();
break
;
}
graphic2dView.refreshCanvas();
}
@Override
public
void
onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super
.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_context_shape, menu);
}
@Override
public
boolean
onContextItemSelected(MenuItem item) {
menuOption = item.getItemId();
drawImage();
return
super
.onContextItemSelected(item);
}
private
void
drawOval() {
AffineTransform mat1;
/** Colors */
Color redColor =
new
Color(
0x96ff0000
,
true
);
Color greenColor =
new
Color(
0xff00ff00
);
mat1 =
new
AffineTransform();
mat1.translate(
30
,
40
);
mat1.rotate(-
30
* Math.PI /
180.0
);
graphics2D.clear(Color.WHITE);
graphics2D.Reset();
graphics2D.setAffineTransform(
new
AffineTransform());
SolidBrush brush =
new
SolidBrush(greenColor);
graphics2D.fillOval(brush,
20
,
60
,
100
,
50
);
com.mapdigit.drawing.Pen pen
=
new
com.mapdigit.drawing.Pen(redColor,
5
);
graphics2D.setAffineTransform(mat1);
graphics2D.drawOval(pen,
20
,
60
,
100
,
50
);
}
private
void
drawPear() {
Ellipse circle, oval, leaf, stem;
Area circ, ov, leaf1, leaf2, st1, st2;
circle =
new
Ellipse();
oval =
new
Ellipse();
leaf =
new
Ellipse();
stem =
new
Ellipse();
circ =
new
Area(circle);
ov =
new
Area(oval);
leaf1 =
new
Area(leaf);
leaf2 =
new
Area(leaf);
st1 =
new
Area(stem);
st2 =
new
Area(stem);
graphics2D.clear(Color.WHITE);
graphics2D.Reset();
int
w = SharedGraphics2DInstance.CANVAS_WIDTH;
int
h = SharedGraphics2DInstance.CANVAS_HEIGHT;
int
ew = w /
2
;
int
eh = h /
2
;
SolidBrush brush =
new
SolidBrush(Color.GREEN);
graphics2D.setDefaultBrush(brush);
leaf.setFrame(ew -
16
, eh -
29
,
15
,
15
);
leaf1 =
new
Area(leaf);
leaf.setFrame(ew -
14
, eh -
47
,
30
,
30
);
leaf2 =
new
Area(leaf);
leaf1.intersect(leaf2);
graphics2D.fill(
null
, leaf1);
leaf.setFrame(ew +
1
, eh -
29
,
15
,
15
);
leaf1 =
new
Area(leaf);
leaf2.intersect(leaf1);
graphics2D.fill(
null
, leaf2);
brush =
new
SolidBrush(Color.BLACK);
graphics2D.setDefaultBrush(brush);
stem.setFrame(ew, eh -
42
,
40
,
40
);
st1 =
new
Area(stem);
stem.setFrame(ew +
3
, eh -
47
,
50
,
50
);
st2 =
new
Area(stem);
st1.subtract(st2);
graphics2D.fill(
null
, st1);
brush =
new
SolidBrush(Color.YELLOW);
graphics2D.setDefaultBrush(brush);
circle.setFrame(ew -
25
, eh,
50
,
50
);
oval.setFrame(ew -
19
, eh -
20
,
40
,
70
);
circ =
new
Area(circle);
ov =
new
Area(oval);
circ.add(ov);
graphics2D.fill(
null
, circ);
}
private
void
drawShape2D() {
Color bg = Color.white;
Color fg = Color.black;
Color red = Color.red;
Color white = Color.white;
com.mapdigit.drawing.Pen pen
=
new
com.mapdigit.drawing.Pen(fg,
1
);
SolidBrush brush =
new
SolidBrush(red);
graphics2D.clear(bg);
graphics2D.Reset();
Dimension d =
new
Dimension(SharedGraphics2DInstance.CANVAS_WIDTH,
SharedGraphics2DInstance.CANVAS_HEIGHT);
int
gridWidth = d.width /
2
;
int
gridHeight = d.height /
6
;
int
x =
5
;
int
y =
7
;
int
rectWidth = gridWidth -
2
* x;
int
stringY = gridHeight -
3
-
2
-
16
;
int
rectHeight = stringY - y -
2
;
graphics2D.draw(pen,
new
Line(x, y + rectHeight -
1
,
x + rectWidth, y));
x += gridWidth;
graphics2D.draw(pen,
new
Rectangle(x, y, rectWidth,
rectHeight));
x += gridWidth;
x =
5
;
y += gridHeight;
stringY += gridHeight;
graphics2D.draw(pen,
new
RoundRectangle(x, y, rectWidth,
rectHeight,
10
,
10
));
x += gridWidth;
graphics2D.draw(pen,
new
Arc(x, y, rectWidth,
rectHeight,
90
,
135
,
Arc.OPEN));
x =
5
;
y += gridHeight;
stringY += gridHeight;
graphics2D.draw(pen,
new
Ellipse(x, y, rectWidth,
rectHeight));
x += gridWidth;
int
x1Points[] = { x, x + rectWidth, x,
x + rectWidth };
int
y1Points[] = { y, y + rectHeight,
y + rectHeight, y };
com.mapdigit.drawing.geometry.Path polygon
=
new
com.mapdigit.drawing.geometry.Path(
com.mapdigit.drawing.geometry.Path.WIND_EVEN_ODD,
x1Points.length);
polygon.moveTo(x1Points[
0
], y1Points[
0
]);
for
(
int
index =
1
; index < x1Points.length; index++) {
polygon.lineTo(x1Points[index], y1Points[index]);
}
polygon.closePath();
graphics2D.draw(pen, polygon);
x =
5
;
y += gridHeight;
stringY += gridHeight;
int
x2Points[] = { x, x + rectWidth, x, x + rectWidth };
int
y2Points[] = { y, y + rectHeight, y + rectHeight, y };
com.mapdigit.drawing.geometry.Path polyline
=
new
com.mapdigit.drawing.geometry.Path(
com.mapdigit.drawing.geometry.Path.WIND_EVEN_ODD,
x2Points.length);
polyline.moveTo(x2Points[
0
], y2Points[
0
]);
for
(
int
index =
1
; index < x2Points.length; index++) {
polyline.lineTo(x2Points[index], y2Points[index]);
}
graphics2D.draw(pen, polyline);
x += gridWidth;
graphics2D.setPenAndBrush(pen, brush);
graphics2D.fill(
null
,
new
Rectangle(x, y, rectWidth, rectHeight));
graphics2D.draw(
null
,
new
Rectangle(x, y, rectWidth, rectHeight));
x =
5
;
y += gridHeight;
stringY += gridHeight;
Color[] colors =
new
Color[] { red, white };
int
[] fractions =
new
int
[] {
0
,
255
};
LinearGradientBrush redtowhite
=
new
LinearGradientBrush(x, y, x
+ rectWidth, y, fractions, colors,
com.mapdigit.drawing.Brush.NO_CYCLE);
graphics2D.setPenAndBrush(pen, redtowhite);
graphics2D.fill(
null
,
new
RoundRectangle(x, y, rectWidth,
rectHeight,
10
,
10
));
graphics2D.draw(
null
,
new
RoundRectangle(x, y, rectWidth,
rectHeight,
10
,
10
));
x += gridWidth;
graphics2D.setPenAndBrush(pen, brush);
graphics2D.fill(
null
,
new
Arc(x, y, rectWidth,
rectHeight,
90
,
135
,
Arc.CHORD));
graphics2D.draw(
null
,
new
Arc(x, y, rectWidth,
rectHeight,
90
,
135
,
Arc.CHORD));
x =
5
;
y += gridHeight;
stringY += gridHeight;
int
x3Points[] = { x, x + rectWidth, x, x + rectWidth };
int
y3Points[] = { y, y + rectHeight, y + rectHeight, y };
com.mapdigit.drawing.geometry.Path filledPolygon
=
new
com.mapdigit.drawing.geometry.Path(
com.mapdigit.drawing.geometry.Path.WIND_EVEN_ODD,
x3Points.length);
filledPolygon.moveTo(x3Points[
0
], y3Points[
0
]);
for
(
int
index =
1
; index < x3Points.length; index++) {
filledPolygon.lineTo(x3Points[index], y3Points[index]);
}
filledPolygon.closePath();
graphics2D.setPenAndBrush(pen, brush);
graphics2D.fill(
null
, filledPolygon);
graphics2D.draw(
null
, filledPolygon);
}
}
相关推荐
在Android平台进行3D图形开发时,OpenGL ES(Open Graphics Library for Embedded Systems)是一项关键的技术。它允许开发者在移动设备上创建复杂的3D图形和动画。在OpenGL ES的环境中,3D坐标变换是构建和操作3D...
《Android简明开发教程》是一份详尽的指南,旨在帮助初学者和有经验的开发者快速掌握Android应用开发。这份教程共分为二十四篇,涵盖了Android开发的基础到高级主题,包括安装Android SDK、创建第一个应用程序、理解...
### Android OpenGL ES 开发教程详解 #### 概述与历史沿革 OpenGL ES(OpenGL for Embedded Systems)作为OpenGL API的子集,专为移动设备、PDA和游戏主机等嵌入式系统设计,旨在简化3D图形应用的开发流程。自2003...
《Android开发教程CHM》是一本专为Android开发者设计的详尽指南,旨在帮助初学者和有经验的开发者深入理解Android平台的各个方面。这个CHM(Microsoft Compiled HTML Help)文件包含了大量的信息,使得学习和查阅...
【Android开发简明教程中文版】是一份专为初学者设计的详细教程,旨在帮助学习者快速掌握Android应用开发的基本技能。这份资料由经验丰富的教师编写,内容全面且深入浅出,适合对移动开发感兴趣的开发者或者在校学生...
Android OpenGL ES 简明开发真正的3D图 Android平台提供的OpenGL ES API主要定义在包android.opengl ,javax.microedition.khronos.egl ,javax.microedition.khronos.opengles ,java.nio 等几个包中
Android OpenGL ES 简明开发教程相关源码添加颜色 简单的上色方法叫做顶点着色(Vertxt coloring),可以使用单色,也可以定义颜色渐变或者使用材质(类同于二维图形中各种Brush类型)。
这个简明开发教程主要参考了Jayway Team Blog中关于OpenGL ES开发的教程,该教程比较通俗易懂,非常适合OpenGL ES的初学者。教程主要通过示例和步骤讲解,旨在帮助没有3D开发经验的程序员快速入门。并且,由于很多...
这个“Android OpenGL ES 简明开发教程相关源码材质渲染”旨在教授如何在Android应用中利用OpenGL ES进行材质渲染,从而创建出丰富的视觉效果。 材质渲染是OpenGL ES中的关键概念,它涉及到物体表面的外观属性,如...
实验可能包括使用OpenGL、DirectX或WebGL等图形库创建基本的几何形状、实现图形变换、绘制复杂的场景,以及实现简单的动画效果。 3. **复习重点**:复习资料通常会突出课程中的关键点,比如图形渲染管线(从顶点到...
### AutoCAD2010简明教程知识点梳理 #### 第1课 计算机绘图技术概述 **本课要点**: 1. **计算机绘图技术简介**:介绍计算机绘图的基本概念和技术背景。 2. **现有计算机绘图技术**:概述当前主流的计算机绘图技术...
张彩明教授的《计算机图形学简明教程》是这门领域的一本重要教材,旨在为学习者提供清晰易懂的理论基础和实践指导。实验部分是理解和掌握计算机图形学的关键,因为它使理论知识得以应用并直观地展现出来。 本实验...
《计算机图形学简明教程》是山东大学计算机学院张彩明教授编著的一本教材,其配套课件为学习者提供了丰富的视觉辅助资料,帮助理解复杂的概念。 课件内容可能涵盖了以下几个关键知识点: 1. **基础理论**:计算机...
张彩明教授的《计算机图形学简明教程》是一本深入浅出介绍这个主题的教材,而配套的习题答案则为学习者提供了检验理解和实践的宝贵资源。 计算机图形学涉及多个知识点,包括: 1. **基础概念**:理解基本的图形...
Web前端开发简明教程.pdf
### 计算机图形学简明教程课后习题答案解析 #### 第二章知识点解析 **2.1 计算机图形系统的主要功能** 计算机图形系统是用于生成、处理和显示图形信息的一种综合系统。它主要包括以下几种关键功能: 1. **计算...
本教程主要介绍了Android APP开发的基本步骤,从SDK下载、开发环境搭建、代码编写、APP打包等步骤一一讲解,为读者提供了一个简明的Android APP开发入门教程。 一、准备工作 在开始Android APP开发之前,需要准备...
AndroidOpenGLES简明开发教程.pdf