关于安卓的Activity

 

其实说实话,还是不怎么爱写博客,索性不勉强自己,但今天想写点东西,关于安卓的Activity。自己写了一个安卓的简单游戏,虽然简单,但里面牵扯到了颇多类容,算是入了个门。我写的这个游戏主要实现有安卓组件运用,界面风格设定,界面布局,界面跳转,界面销毁,界面返回键菜单键的屏蔽,自定义SurfaceView组件画图,线程的使用,事件监听,获取权限,数据保存等等等等。里面几乎所有的类容都与Activity有关。

1.自定义界面风格

在资源文件夹的value目录下的style.xml里面可以自己设定风格,最好的方式是先继承一种系统提供的风格,再根据自己的需要改 ,下面的MyTheme是我自定义的风格

<style name="MyTheme" parent="AppBaseTheme"
        >
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowNoTitle">true</item>
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

同时还需要在安卓的主配置文件里面,把自己需要改变风格的界面里设置为自己定义的风格

 <activity
            android:name="com.example.foolgame.GameActivity"
            android:label="@string/title_activity_game"
            android:theme="@style/MyTheme" >
        </activity>

2.界面布局

这个部分是很死的类容,只要搞清每种布局的属性就行了,再改一些布局的基本属性,多种布局嵌套使用,这些搞定了,你的界面想怎么布局就就怎么布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AnswerActivity" >
    <TextView
      />
    <TableLayout
       ======嵌套一个布局
    </TableLayout>
</RelativeLayout>

3.界面跳转

 界面的跳转是一件再容易不过的事情了

startActivity(new Intent(this,AnswerActivity.class));

 so easy有木有

4.界面的销毁

这个东西更简单,只要this.finish();就OK了,不过还有事情不要忘记做了,就是这个界面的线程,你可以用标记来结束线程,或是重写Activity的onDestroy方法,这个方法很有用,它处在安卓页面生命周期的末尾,所以我们可以再这个方法里面写一些销毁页面后的善后工作,比如结束线程

	public void run() {
		while(!stopflag){

	}
	 protected void onDestroy() {
         //这里可以写一些善后工作
		 super.onDestroy();
		 stopflag=true;
	 }

 

5.屏蔽返回键或菜单键

返回键的的屏蔽或是设置询问对话框是很有必要的,我几乎每一个界面都屏蔽了原来Activity的返回键功能,这可以通过重写来实现

	 public boolean onKeyDown(int keyCode, KeyEvent event) {  
			if(keyCode==KeyEvent.KEYCODE_BACK){  
			    new Exit(this);//弹出询问对话框
			}  
			    return false;  
	} 

6.用SurfaceView画图

 要用好这玩意的关键在于三点:

1.获取SurfaceHolder,hold住全场,

2.实现SurfaceHolder.Callback接口并且添加回调函数

3.锁定画布,画图,提交画布

下面是一个SurfaceView的模板代码

//这是强哥讲的另一种自定义组件,一般是用这个做游戏的
public class MySurfaceView extends SurfaceView implements Callback,Runnable{
	private ArrayList<Entity> list = new ArrayList<Entity>();
	private SurfaceHolder holder;
	private Paint paint=new Paint();
	private boolean runflag=true;
	private static boolean stopflag=false;
	public MySurfaceView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}
	public MySurfaceView(Context context) {
		this(context, null);
	}
	public MySurfaceView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
		holder=this.getHolder();
		holder.addCallback(this);
	}
	public void surfaceCreated(SurfaceHolder holder) {
		Thread t=new Thread(this);
		t.start();
	}
	public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {	
	}
	public void surfaceDestroyed(SurfaceHolder holder) {
		runflag=false;
	}
	public void run() {
		while(runflag){
			if(stopflag)continue;
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			Canvas canvas=null;
			try {
				canvas=holder.lockCanvas();
				paint.setStyle(Style.FILL);
				paint.setColor(Color.BLACK);
				canvas.drawRect(0,0, this.getWidth(), this.getHeight(), paint);
				
				for(int i=0;i<list.size();i++){
					list.get(i).draw(canvas);
					list.get(i).move();
				}
				
			} catch (Exception e) {
				// TODO: handle exception
			}finally{
				//画布画完后要释放
				if(runflag){
					holder.unlockCanvasAndPost(canvas);
				}
			}
			
		}
	}


}

7.获取权限

如果我们想使用一些系统服务,那么久要获取相应的权限,这里方法很简单,在主配置文件里加一行权限的获取就行了

?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.foolgame"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <application>
</application>
<uses-permission android:name="android.permission.VIBRATE"/>

 要注意的是,请写在application之外,上面是我写的获取震动权限,不写的话,调用震动方法时就会报错

猜你喜欢

转载自938743180.iteye.com/blog/2100725