Android开发速成简洁教程九:创建应用程序框架

Android简明开发教程八说明了程序需要实现的功能,就可以创建Android项目了。请参见Android简明开发教程三:第一个应用Hello World ,创建一个新项目AndroidGraphics2DTutorial。今天先介绍创建的程序的框架。然后再项目添加如下类定义:

专注于为中小企业提供成都网站建设、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业浦城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

添加第三方库文件

AndroidGraphics2DTutorial调用了引路蜂二维图形库,因此需要在项目中添加第三方库引用 (libgisengine.jar),打开Android属性窗口,添加External JARs。把libgisengine.jar 添加到项目中,引路蜂二维图形库是引路蜂地图开发包的一部分。添加库引用可以参见 Android引路蜂地图开发示例:基本知识。

类说明,下表列出了项目中定义的类的简要说明:

说明
AndroidGraphics2DApplication应用程序类,为Application子类
AndroidGraphics2DTutorial主Activity,为ListActivity子类,用于列出其它示例。
GuidebeeGraphics2DSurfaceViewSurfaceView子类用于显示图形
GuidebeeGraphics2DViewView子类用于显示图形,与GuidebeeGraphics2DSurfaceView 功能一样,在程序中可以互换。
SharedGraphics2DInstance定义了共享类对象,主要包含Graphics2D
Graphics2DActivityActivity子类,为所有示例基类,定义一些所有示例共享的类变量和函数。
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派生类的位置。

 
 
 
 
  1.       package=”com.pstreets.graphics2d” 
  2.       android:versionCode=”1″ 
  3.       android:versionName=”1.0″> 
  4.     
  5.          android:icon=”@drawable/icon” android:label=”@string/app_name”> 
  6.         
  7.                   android:label=”@string/app_name”> 
  8.              
  9.                  
  10.                  
  11.              
  12.          
  13.   … 
  14.      
  15.      
  16.  
  17.     

Application 可以重载 onCreate()和 onTerminate() ,onCreate()在应用启动时执行一次,onTerminate()在应用推出执行一次。 AndroidGraphics2DApplication 的onCreate() 中初始化Graphics2D实例:

 
 
 
 
  1. public void onCreate() { 
  2.       SharedGraphics2DInstance.graphics2d= 
  3.           new Graphics2D(SharedGraphics2DInstance.CANVAS_WIDTH, 
  4.             SharedGraphics2DInstance.CANVAS_HEIGHT); 
  5.      } 

AndroidGraphics2DTutorial 为ListActivity子类,直接从AndroidManifest.xml中读取Intent-Filter Catetory 为 com.pstreets.graphics2d.SAMPLE_CODE 的所有Activity。

 
 
 
 
  1. private static final String SAMPLE_CATEGORY="com.pstreets.graphics2d.SAMPLE_CODE";    
  2.     Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
  3.     mainIntent.addCategory(SAMPLE_CATEGORY); 
  4.     ... 

GuidebeeGraphics2DSurfaceView 和 GuidebeeGraphics2DView 分别为SurfaceView 和View的子类,都可以用来显示图形结果。在程序中可以互换。

 
 
 
 
  1. package com.pstreets.graphics2d;      
  2.     import android.content.Context; 
  3.     import android.graphics.Canvas; 
  4.     import android.util.AttributeSet; 
  5.     import android.view.View;     
  6.     public class GuidebeeGraphics2DView extends View {    
  7.      public GuidebeeGraphics2DView(Context context, AttributeSet attrs, 
  8.        int defStyle) { 
  9.       super(context, attrs, defStyle); 
  10.          }    
  11.      public GuidebeeGraphics2DView(Context context, AttributeSet attrs) { 
  12.       super(context, attrs);      
  13.      }  
  14.      public GuidebeeGraphics2DView(Context context) { 
  15.       super(context); 
  16.       
  17.      }    
  18.      public void onDraw(Canvas canvas) { 
  19.       super.onDraw(canvas); 
  20.       canvas.drawColor(0xFFFFFFFF); 
  21.       if (SharedGraphics2DInstance.graphics2d != null) { 
  22.        int offsetX = (getWidth() - 
  23.          SharedGraphics2DInstance.CANVAS_WIDTH) / 2; 
  24.        int offsetY = (getHeight() 
  25.          - SharedGraphics2DInstance.CANVAS_HEIGHT) / 2; 
  26.        canvas.drawBitmap(SharedGraphics2DInstance.graphics2d.getRGB(), 0, 
  27.          SharedGraphics2DInstance.CANVAS_WIDTH, 
  28.          offsetX, offsetY, 
  29.          SharedGraphics2DInstance.CANVAS_WIDTH, 
  30.          SharedGraphics2DInstance.CANVAS_HEIGHT, 
  31.          true, null); 
  32.       } 
  33.      }    
  34.     }
 
 
 
 
  1. package com.pstreets.graphics2d;      
  2.     import android.content.Context; 
  3.     import android.graphics.Canvas; 
  4.     import android.util.AttributeSet; 
  5.     import android.view.SurfaceHolder; 
  6.     import android.view.SurfaceView;      
  7.     public class GuidebeeGraphics2DSurfaceView extends 
  8.        SurfaceView implements SurfaceHolder.Callback {  
  9.      SurfaceHolder holder;    
  10.      private void initHolder() { 
  11.       holder = this.getHolder(); 
  12.       holder.addCallback(this); 
  13.      }    
  14.      public GuidebeeGraphics2DSurfaceView(Context context, 
  15.        AttributeSet attrs, 
  16.        int defStyle) { 
  17.       super(context, attrs, defStyle); 
  18.       initHolder();  
  19.      }    
  20.      public GuidebeeGraphics2DSurfaceView(Context context, 
  21.        AttributeSet attrs) { 
  22.       super(context, attrs); 
  23.       initHolder();   
  24.      }    
  25.      public GuidebeeGraphics2DSurfaceView(Context context) { 
  26.       super(context); 
  27.       initHolder();   
  28.      }    
  29.      @Override 
  30.      public void surfaceChanged(SurfaceHolder arg0, 
  31.        int arg1, int arg2, int arg3) { 
  32.       // TODO Auto-generated method stub 
  33.      }    
  34.      @Override   public void surfaceCreated(SurfaceHolder arg0) { 
  35.       new Thread(new MyThread()).start();     
  36.      }    
  37.      @Override 
  38.      public void surfaceDestroyed(SurfaceHolder arg0) { 
  39.       // TODO Auto-generated method stub      
  40.      }    
  41.      class MyThread implements Runnable {     
  42.       @Override 
  43.       public void run() { 
  44.        Canvas canvas = holder.lockCanvas(null); 
  45.        canvas.drawColor(0xFFFFFFFF); 
  46.        if (SharedGraphics2DInstance.graphics2d != null) { 
  47.         int offsetX = (getWidth() - 
  48.           SharedGraphics2DInstance.CANVAS_WIDTH) / 2; 
  49.         int offsetY = (getHeight() - 
  50.           SharedGraphics2DInstance.CANVAS_HEIGHT) / 2; 
  51.         canvas.drawBitmap 
  52.           (SharedGraphics2DInstance.graphics2d.getRGB(), 
  53.           0, SharedGraphics2DInstance.CANVAS_WIDTH, 
  54.           offsetX, 
  55.           offsetY, 
  56.           SharedGraphics2DInstance.CANVAS_WIDTH, 
  57.           SharedGraphics2DInstance.CANVAS_HEIGHT, 
  58.           true, null); 
  59.        } 
  60.        holder.unlockCanvasAndPost(canvas);    
  61.       }   
  62.      }    
  63.     } 

SurfaceView 动态显示性能比较好,一般用在游戏画面的显示。图形的绘制可以在单独的线程中完成。

修改 res\layout\main.xml

 
 
 
 
  1.  
  2.     android:orientation=”vertical” 
  3.     android:layout_width=”fill_parent” 
  4.     android:layout_height=”fill_parent” 
  5.     > 
  6.      android:id=”@+id/graphics2dview” 
  7.    
  8.      android:layout_width=”fill_parent” 
  9.      android:layout_height=”fill_parent” /> 
  10.  

如果使用 GuidebeeGraphics2DView作为显示,则只需将上面红色部分该成GuidebeeGraphics2DView即可。

为了能在AndroidGraphics2DTutorial 列表中列出,对项目中的示例Activity的都定义下列intent-filter

 
 
 
 
  1.  
  2.              
  3.                  
  4.                  
  5.              
  6.          

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

文章名称:Android开发速成简洁教程九:创建应用程序框架
文章地址:http://www.shufengxianlan.com/qtweb/news2/246202.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联