您的位置:首页 > 移动开发 > Android开发

【Android游戏特效】项目实战

2015-07-28 01:40 603 查看
今天带来的是游戏特技,放个大招,让大家感受一下Android也是可以酷炫地!!!

项目效果图

静态效果图



动态效果图



项目结构



项目图片资源

背景图片:main_bg.png

特效图片:z1.png~z23.png(一共23张图,可随意增删,看特效需要)

说明: 放于drawable-hdpi目录下

















































技术预告

界面技术:FrameLayout(帧布局或层叠布局)

逻辑技术:Timer(定时器类),TimerTask(定时任务类),Handler(收发消息类),Drawable(位图类)

数组,for循环,方法,代码获取图片资源Id

界面开发

主界面布局文件:layout/activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/main_bg"
>

</FrameLayout>


注册文件:AndroidMenifest.xml(默认就好,没有改动这里)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kedi.teji"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.kedi.teji.MainActivity"
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>

</manifest>


其他布局或资源文件也没有改动,默认就好。

功能开发

包:com.kedi.teji

主界面类MainActivity.java

package com.kedi.teji;

import java.util.Timer;
import java.util.TimerTask;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.widget.FrameLayout;

/**
* 主界面类
*
* @author 科弟
*
*/
public class MainActivity extends Activity {
// 帧布局变量
private FrameLayout mCantainerFl;
// 定义消息标识
private static final int WHAT = 0x001;
// 定义存放23张图片的图片对象
private Drawable[] pics = new Drawable[23];
// Handler的作用: 发送和接收消息的,可在HandleMessage接收消息并做相应的处理
private Timer timer;// 定时器类
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
// 定义i变量,以方便循环显示图片,
int i = 0;

public void handleMessage(android.os.Message msg) {
// 判断是否为本应用发送的消息
if (msg.what == WHAT) {
i++;
teji(i % 23);
}
super.handleMessage(msg);
};

};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCantainerFl = (FrameLayout) this.findViewById(R.id.container);
//初始化图片对象数组
initPics();
// 定时器类
timer = new Timer();
// 任务
TimerTask task = new TimerTask() {

@Override
public void run() {
// 发送消息
mHandler.sendEmptyMessage(WHAT);
}
};
// 每170毫秒执行一次发送消息的任务
timer.schedule(task, 0,170);
}

/**
* 初始化图片对象数组
*/
private void initPics() {
for (int i = 0; i < pics.length; i++) {
//获得图片的ID
int drawableId = getResources().getIdentifier("z" + (i + 1),
"drawable", "com.kedi.teji");
//获得指定Id的图片对象,并存放到数组中
pics[i] = getResources().getDrawable(drawableId);
}
}

/**
* 为FrameLayout设置前景图片以及前景图片要显示的位置(居中)
*
* @param i
*/
private void teji(int i) {
mCantainerFl.setForeground(pics[i]);
mCantainerFl.setForegroundGravity(Gravity.CENTER);
}

@Override
protected void onPause() {
super.onPause();
//界面快要关闭时取消定时器,要不然程序退出后次定时器的任务还在执行
timer.cancel();
}
}


下载地址

下载地址:  http://download.csdn.net/detail/kedi_study/8938293
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: