`

Android简明开发教程九:创建应用程序框架

 
阅读更多

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) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
new Thread( new MyThread()).start();
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
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>

这样就完成了程序框架的设计,起始界面如下:

分享到:
评论

相关推荐

    android开发教程CHM

    1. **Android系统架构**:Android是一个分层的系统,由Linux内核、硬件抽象层、系统库、应用程序框架和应用程序组成。理解这些层如何交互对于构建高效的Android应用至关重要。 2. **环境搭建**:安装Android Studio...

    Android简明开发教程二十四篇及示例代码下载.pdf

    《Android简明开发教程》是一份详尽的指南,旨在帮助初学者和有经验的开发者快速掌握Android应用开发。这份教程共分为二十四篇,涵盖了Android开发的基础到高级主题,包括安装Android SDK、创建第一个应用程序、理解...

    android简单教程+安装+相关信息.rar

    Android操作系统基于Linux内核,它提供了丰富的应用程序框架,允许开发者用Java语言编写应用。Android Market(现Google Play Store)是官方的应用分发平台,用户可以在这里下载各种免费或付费的应用程序和游戏。 ...

    超爽android中文教程

    Android是由Linux内核为基础的开源操作系统,其架构包括硬件层、系统库层、应用程序框架层以及应用程序层。理解这四层之间的关系和交互是掌握Android开发基础的第一步。 接下来,你需要掌握Android Studio,这是...

    Java简明教程.rar

    Java的广泛应用包括Web开发、移动应用(尤其是Android平台)、企业级应用、大数据处理等。 本压缩包“Java简明教程.rar”提供了学习Java编程的基础资料,包括电子课件、习题答案和实例源文件。这将帮助初学者深入...

    Java简明教程(第2版)课件

    它的设计目标是简洁、高效且可移植性强,被应用于各种领域,如Web开发、移动应用(尤其是Android平台)、企业级应用、大数据处理等。"Java简明教程(第2版)课件"提供了全面的学习资源,帮助初学者和有经验的开发者...

    Kotlin 入门教程指南

    * Kotlin 非常适合开发服务器端应用程序,允许编写简明且表现力强的代码,同时保持与现有基于 Java 的技术栈的完全兼容性。 * 表现力:Kotlin 的革新式语言功能,例如支持类型安全的构建器和委托属性,有助于构建...

    kotlin-docs.pdf

    针对想要入门Kotlin的开发者,文档会提供一系列指南,包括使用HttpServlet创建Web应用程序和使用SpringBoot创建RESTful Web服务的教程,帮助开发者快速上手和构建小型项目。 在学习资源方面,Kotlin官方提供了各种...

    《Java简明教程(第二版)》电子课件

    Java语言自诞生以来,已经广泛应用于互联网应用开发、移动应用(如Android)、企业级应用服务器等领域,成为全球最受欢迎的编程语言之一。 在本书中,作者首先会讲解Java的基本语法,包括变量、数据类型、运算符、...

    flex快速上手中文资料

    通过Flex,开发者可以创建跨平台的应用程序,覆盖iOS、Android等不同设备。 总的来说,“flex快速上手中文资料”应当涵盖了这些基础概念,并通过实例和简明教程帮助初学者快速上手。学习Flex不仅能够提升Web应用...

    delphi firemonkey 资料

    Delphi FireMonkey 是一个强大的跨平台应用程序开发框架,由Embarcadero Technologies开发。它允许开发者使用单一的代码库创建原生的、高性能的应用程序,不仅适用于Windows,还支持Mac OS X、iOS和Android等操作...

    delphiXE4 for ios 学习教程

    在移动应用开发领域,DelphiXE4为开发者提供了一种高效的方式,通过其强大的FireMonkey框架,实现了跨平台开发,包括iOS设备。本教程集合了网络上关于DelphiXE4在iOS开发中的精华内容,旨在帮助学习者快速掌握这一...

    [Java语言程序设计].(Introduction

    2. **Web应用开发**:Java EE标准提供了丰富的框架和工具,支持快速开发高性能的Web应用程序。 3. **移动应用开发**:尽管Android平台主要使用Kotlin,但Java仍然是开发Android应用的重要语言之一。 4. **大数据技术...

    java 教程 摘要文档

    它的设计目标是具有简单的语法、健壮性和安全性,同时也注重性能和跨平台能力,这使得Java成为互联网应用、企业级应用、移动应用(尤其是Android平台)开发的首选语言。 在Java教程中,通常会涵盖以下关键知识点: ...

    kotlin文档(中文,整理于网络)

    Ktor是一个由JetBrains创建的、专为在Kotlin中创建Web应用程序而设计的框架,同样利用了协程来实现高可伸缩性。对于构建Web页面,kotlinx.html是一个DSL(领域特定语言),允许开发者使用Kotlin语法来构建HTML。 ...

    26个编程必备API(中文)

    在编程世界中,API(应用程序接口)是开发者与软件系统交互的重要工具,它们提供了一系列预定义的函数、类和方法,使得开发人员可以利用这些功能快速构建应用。本压缩包集合了26个编程必备的API文档,主要针对Java、...

    2018年java学习计划-范文模板 (16页).docx

    **推荐资源**:阅读《Java大学简明教程》、《Java语言程序设计(基础篇)》以及观看马士兵的Java视频教程。 **实践项目**:在每个阶段结束时,完成一个小项目,例如坦克大战、贪吃蛇等,以巩固所学知识。 **第二部分...

    java教程,入门级别,很容易看懂

    它具有简单性、面向对象、跨平台等特性,适用于开发各种类型的应用程序,包括企业级应用、移动应用(尤其是 Android 应用)、Web 应用等。Java 的设计目标是“一次编写,到处运行”(Write Once, Run Anywhere),这...

Global site tag (gtag.js) - Google Analytics