Android简明开发教程八
说明了程序需要实现的功能,就可以创建Android项目了。请参见Android简明开发教程三:第一个应用Hello World
,创建一个新项目AndroidGraphics2DTutorial。今天先介绍创建的程序的框架。然后再项目添加如下类定义:
添加第三方库文件
AndroidGraphics2DTutorial调用了引路蜂二维图形库,因此需要在项目中添加第三方库引用(libgisengine.jar),打开Android属性窗口,添加External JARs。把libgisengine.jar 添加到项目中,引路蜂二维图形库是引路蜂地图开发包的一部分。添加库引用可以参见 Android引路蜂地图开发示例:基本知识
。
类说明,下表列出了项目中定义的类的简要说明:
类 |
说明 |
AndroidGraphics2DApplication |
应用程序类,为Application子类 |
AndroidGraphics2DTutorial |
主Activity,为ListActivity子类,用于列出其它示例。 |
GuidebeeGraphics2DSurfaceView |
SurfaceView子类用于显示图形 |
GuidebeeGraphics2DView |
View子类用于显示图形,与GuidebeeGraphics2DSurfaceView 功能一样,在程序中可以互换。 |
SharedGraphics2DInstance |
定义了共享类对象,主要包含Graphics2D |
Graphics2DActivity |
Activity子类,为所有示例基类,定义一些所有示例共享的类变量和函数。 |
Bezier,Brush,Colors,Font,Image,Path,Pen,Shape,Transform |
为Graphics2DActivity的子类,为二维图形演示各个功能 |
AndroidGraphics2DApplication ,其实在一般的Android应用中,无需定义Application的派生类,比如在Hello World中就没有定义,当是如果想在多个Activity中共享变量,或是想初始化一些全局变量,可以定义Application的派生类,然后可以在Activity或Service中调用 getApplication() 或 getApplicationContext()来取得Application 对象,可以访问定义在Application中的一些共享变量。在这个例子中AndroidGraphics2DApplication严格些也可不定义,为了说明问题,还是定义了用来初始化Graphics2D实例,Graphics2D实例可以被所有示例Activity,如Colors,Font访问。如果定义了Application的派生类,就需要在AndroidManifest.xml中说明Application派生类的位置。
<manifest xmlns:android=”http://schemas.android.com/apk/res/android
”
package=”com.pstreets.graphics2d
”
android:versionCode=”1″
android:versionName=”1.0″>
<application android:name=”AndroidGraphics2DApplication
”
android:icon=”@drawable/icon” android:label=”@string/app_name”>
<activity android:name=”.AndroidGraphics2DTutorial”
android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
…
</application>
<uses-sdk android:minSdkVersion=”4″ />
</manifest>
Application 可以重载 onCreate()和 onTerminate() ,onCreate()在应用启动时执行一次,onTerminate()在应用推出执行一次。AndroidGraphics2DApplication 的onCreate() 中初始化Graphics2D实例:
1
2
3
4
5
|
public
void
onCreate() {
SharedGraphics2DInstance.graphics2d=
new
Graphics2D(SharedGraphics2DInstance.CANVAS_WIDTH,
SharedGraphics2DInstance.CANVAS_HEIGHT);
}
|
AndroidGraphics2DTutorial 为ListActivity子类,直接从AndroidManifest.xml中读取Intent-Filter Catetory 为 com.pstreets.graphics2d.SAMPLE_CODE 的所有Activity。
1
2
3
4
5
|
private
static
final
String SAMPLE_CATEGORY=
"com.pstreets.graphics2d.SAMPLE_CODE"
;
Intent mainIntent =
new
Intent(Intent.ACTION_MAIN,
null
);
mainIntent.addCategory(SAMPLE_CATEGORY);
...
|
GuidebeeGraphics2DSurfaceView 和 GuidebeeGraphics2DView 分别为SurfaceView 和View的子类,都可以用来显示图形结果。在程序中可以互换。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package
com.pstreets.graphics2d;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.util.AttributeSet;
import
android.view.View;
public
class
GuidebeeGraphics2DView
extends
View {
public
GuidebeeGraphics2DView(Context context, AttributeSet attrs,
int
defStyle) {
super
(context, attrs, defStyle);
}
public
GuidebeeGraphics2DView(Context context, AttributeSet attrs) {
super
(context, attrs);
}
public
GuidebeeGraphics2DView(Context context) {
super
(context);
}
public
void
onDraw(Canvas canvas) {
super
.onDraw(canvas);
canvas.drawColor(
0xFFFFFFFF
);
if
(SharedGraphics2DInstance.graphics2d !=
null
) {
int
offsetX = (getWidth() -
SharedGraphics2DInstance.CANVAS_WIDTH) /
2
;
int
offsetY = (getHeight()
- SharedGraphics2DInstance.CANVAS_HEIGHT) /
2
;
canvas.drawBitmap(SharedGraphics2DInstance.graphics2d.getRGB(),
0
,
SharedGraphics2DInstance.CANVAS_WIDTH,
offsetX, offsetY,
SharedGraphics2DInstance.CANVAS_WIDTH,
SharedGraphics2DInstance.CANVAS_HEIGHT,
true
,
null
);
}
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
package
com.pstreets.graphics2d;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.util.AttributeSet;
import
android.view.SurfaceHolder;
import
android.view.SurfaceView;
public
class
GuidebeeGraphics2DSurfaceView
extends
SurfaceView
implements
SurfaceHolder.Callback {
SurfaceHolder holder;
private
void
initHolder() {
holder =
this
.getHolder();
holder.addCallback(
this
);
}
public
GuidebeeGraphics2DSurfaceView(Context context,
AttributeSet attrs,
int
defStyle) {
super
(context, attrs, defStyle);
initHolder();
}
public
GuidebeeGraphics2DSurfaceView(Context context,
AttributeSet attrs) {
super
(context, attrs);
initHolder();
}
public
GuidebeeGraphics2DSurfaceView(Context context) {
super
(context);
initHolder();
}
@Override
public
void
surfaceChanged(SurfaceHolder arg0,
int
arg1,
int
arg2,
int
arg3) {
}
@Override
public
void
surfaceCreated(SurfaceHolder arg0) {
new
Thread(
new
MyThread()).start();
}
@Override
public
void
surfaceDestroyed(SurfaceHolder arg0) {
}
class
MyThread
implements
Runnable {
@Override
public
void
run() {
Canvas canvas = holder.lockCanvas(
null
);
canvas.drawColor(
0xFFFFFFFF
);
if
(SharedGraphics2DInstance.graphics2d !=
null
) {
int
offsetX = (getWidth() -
SharedGraphics2DInstance.CANVAS_WIDTH) /
2
;
int
offsetY = (getHeight() -
SharedGraphics2DInstance.CANVAS_HEIGHT) /
2
;
canvas.drawBitmap
(SharedGraphics2DInstance.graphics2d.getRGB(),
0
, SharedGraphics2DInstance.CANVAS_WIDTH,
offsetX,
offsetY,
SharedGraphics2DInstance.CANVAS_WIDTH,
SharedGraphics2DInstance.CANVAS_HEIGHT,
true
,
null
);
}
holder.unlockCanvasAndPost(canvas);
}
}
}
|
SurfaceView 动态显示性能比较好,一般用在游戏画面的显示。图形的绘制可以在单独的线程中完成。
修改 res/layout/main.xml
<?xml version=”1.0″ encoding=”utf-8″?>
< LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android
”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
>
<com.pstreets.graphics2d.GuidebeeGraphics2DSurfaceView
android:id=”@+id/graphics2dview”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent” />
< /LinearLayout>
如果使用 GuidebeeGraphics2DView作为显示,则只需将上面红色部分该成GuidebeeGraphics2DView即可。
为了能在AndroidGraphics2DTutorial 列表中列出,对项目中的示例Activity的都定义下列intent-filter
<activity android:name=”.example.Colors” android:label=”@string/activity_colors”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”com.pstreets.graphics2d.SAMPLE_CODE” />
</intent-filter>
</activity>
这样就完成了程序框架的设计,起始界面如下:
分享到:
相关推荐
1. **Android系统架构**:Android是一个分层的系统,由Linux内核、硬件抽象层、系统库、应用程序框架和应用程序组成。理解这些层如何交互对于构建高效的Android应用至关重要。 2. **环境搭建**:安装Android Studio...
《Android简明开发教程》是一份详尽的指南,旨在帮助初学者和有经验的开发者快速掌握Android应用开发。这份教程共分为二十四篇,涵盖了Android开发的基础到高级主题,包括安装Android SDK、创建第一个应用程序、理解...
Android操作系统基于Linux内核,它提供了丰富的应用程序框架,允许开发者用Java语言编写应用。Android Market(现Google Play Store)是官方的应用分发平台,用户可以在这里下载各种免费或付费的应用程序和游戏。 ...
Android是由Linux内核为基础的开源操作系统,其架构包括硬件层、系统库层、应用程序框架层以及应用程序层。理解这四层之间的关系和交互是掌握Android开发基础的第一步。 接下来,你需要掌握Android Studio,这是...
Java的广泛应用包括Web开发、移动应用(尤其是Android平台)、企业级应用、大数据处理等。 本压缩包“Java简明教程.rar”提供了学习Java编程的基础资料,包括电子课件、习题答案和实例源文件。这将帮助初学者深入...
它的设计目标是简洁、高效且可移植性强,被应用于各种领域,如Web开发、移动应用(尤其是Android平台)、企业级应用、大数据处理等。"Java简明教程(第2版)课件"提供了全面的学习资源,帮助初学者和有经验的开发者...
* Kotlin 非常适合开发服务器端应用程序,允许编写简明且表现力强的代码,同时保持与现有基于 Java 的技术栈的完全兼容性。 * 表现力:Kotlin 的革新式语言功能,例如支持类型安全的构建器和委托属性,有助于构建...
针对想要入门Kotlin的开发者,文档会提供一系列指南,包括使用HttpServlet创建Web应用程序和使用SpringBoot创建RESTful Web服务的教程,帮助开发者快速上手和构建小型项目。 在学习资源方面,Kotlin官方提供了各种...
Java语言自诞生以来,已经广泛应用于互联网应用开发、移动应用(如Android)、企业级应用服务器等领域,成为全球最受欢迎的编程语言之一。 在本书中,作者首先会讲解Java的基本语法,包括变量、数据类型、运算符、...
通过Flex,开发者可以创建跨平台的应用程序,覆盖iOS、Android等不同设备。 总的来说,“flex快速上手中文资料”应当涵盖了这些基础概念,并通过实例和简明教程帮助初学者快速上手。学习Flex不仅能够提升Web应用...
Delphi FireMonkey 是一个强大的跨平台应用程序开发框架,由Embarcadero Technologies开发。它允许开发者使用单一的代码库创建原生的、高性能的应用程序,不仅适用于Windows,还支持Mac OS X、iOS和Android等操作...
在移动应用开发领域,DelphiXE4为开发者提供了一种高效的方式,通过其强大的FireMonkey框架,实现了跨平台开发,包括iOS设备。本教程集合了网络上关于DelphiXE4在iOS开发中的精华内容,旨在帮助学习者快速掌握这一...
2. **Web应用开发**:Java EE标准提供了丰富的框架和工具,支持快速开发高性能的Web应用程序。 3. **移动应用开发**:尽管Android平台主要使用Kotlin,但Java仍然是开发Android应用的重要语言之一。 4. **大数据技术...
它的设计目标是具有简单的语法、健壮性和安全性,同时也注重性能和跨平台能力,这使得Java成为互联网应用、企业级应用、移动应用(尤其是Android平台)开发的首选语言。 在Java教程中,通常会涵盖以下关键知识点: ...
Ktor是一个由JetBrains创建的、专为在Kotlin中创建Web应用程序而设计的框架,同样利用了协程来实现高可伸缩性。对于构建Web页面,kotlinx.html是一个DSL(领域特定语言),允许开发者使用Kotlin语法来构建HTML。 ...
在编程世界中,API(应用程序接口)是开发者与软件系统交互的重要工具,它们提供了一系列预定义的函数、类和方法,使得开发人员可以利用这些功能快速构建应用。本压缩包集合了26个编程必备的API文档,主要针对Java、...
**推荐资源**:阅读《Java大学简明教程》、《Java语言程序设计(基础篇)》以及观看马士兵的Java视频教程。 **实践项目**:在每个阶段结束时,完成一个小项目,例如坦克大战、贪吃蛇等,以巩固所学知识。 **第二部分...
它具有简单性、面向对象、跨平台等特性,适用于开发各种类型的应用程序,包括企业级应用、移动应用(尤其是 Android 应用)、Web 应用等。Java 的设计目标是“一次编写,到处运行”(Write Once, Run Anywhere),这...