package cn.m15.xys;
import java.io.InputStream;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import android.view.SurfaceHolder.Callback;
public class SurfaceViewAcitvity extends Activity{
AnimView mAnimView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 全屏显示窗口
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//强制为横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 获取屏幕宽高
Display display = getWindowManager().getDefaultDisplay();
// 显示自定义的游戏View
mAnimView = new AnimView(this,display.getWidth(), display.getHeight());
setContentView(mAnimView);
}
public boolean onTouchEvent(MotionEvent event) {
// 获得触摸的坐标
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
// 触摸屏幕时刻
case MotionEvent.ACTION_DOWN:
mAnimView.UpdateTouchEvent(x, y);
break;
// 触摸并移动时刻
case MotionEvent.ACTION_MOVE:
break;
// 终止触摸时刻
case MotionEvent.ACTION_UP:
break;
}
return false;
}
public class AnimView extends SurfaceView implements Callback,Runnable{
/**屏幕的宽高**/
private int mScreenWidth = 0;
private int mScreenHeight = 0;
/**游戏主菜单状态**/
private static final int GAME_MENU = 0;
private static final int GAME_LOAD = 1;
private static final int GAME_TEACH = 2;
private static final int GAME_OPTION = 4;
/**游戏状态**/
private int mState = GAME_MENU;
Paint mPaint = null;
/**游戏背景资源**/
private Bitmap mBitMenuBG = null;
/**游戏背景标题资源**/
private Bitmap mBitMenuTitle = null;
/**游戏背景动画**/
private Animation mMenuAnim = null;
/**动画的X坐标**/
private int mMenuAnimPosX = 0;
/**动画的宽度**/
private static final int MENU_ANIM_WIDTH = 75;
/**主菜单教学按钮**/
private ImageButton mButtonTeach = null;
/**主菜单教学按钮的坐标**/
private int mTeachPosX = 0;
private int mTeachPosY = 160;
/**主菜单设置按钮**/
ImageButton mButtonOption = null;
/**主菜单设置按钮的坐标**/
private int mOptionPosX = 340;
private int mOptionPosY = 165;
/**进度条资源**/
private Bitmap mLoadBack = null;
private Bitmap mLoadShow = null;
/**进度条数值 取值范围为0到100**/
private int mProgress = 0;
private int mProgressBar = 0;
/**加载完成进入教学界面**/
private Bitmap mBitTeach = null;
/**雨松MOMO**/
private Bitmap mMomo = null;
/**游戏主线程**/
private Thread mThread = null;
/**线程循环标志**/
private boolean mIsRunning = false;
private SurfaceHolder mSurfaceHolder = null;
private Canvas mCanvas = null;
private Context mContext = null;
/**
* 构造方法
*
* @param context
*/
public AnimView(Context context,int screenWidth, int screenHeight) {
super(context);
mContext = context;
mPaint = new Paint();
mScreenWidth = screenWidth;
mScreenHeight = screenHeight;
/**获取mSurfaceHolder**/
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
setFocusable(true);
init();
setGameState(GAME_MENU);
}
protected void Draw() {
switch (mState) {
case GAME_MENU:
/**计算鱼动画的X坐标向左超出屏幕后在还原保持一直在屏幕上游动**/
mMenuAnimPosX-= 5;
if(mMenuAnimPosX + MENU_ANIM_WIDTH <= 0) {
mMenuAnimPosX = mScreenWidth;
}
/**绘制背景**/
mCanvas.drawBitmap(mBitMenuBG, 0, 0, mPaint);
mCanvas.drawBitmap(mBitMenuTitle, (mScreenWidth - mBitMenuTitle.getWidth()) >> 1,0, mPaint);
mMenuAnim.DrawAnimation(mCanvas, mPaint, mMenuAnimPosX , 100);
/**绘制按钮**/
mButtonTeach.DrawImageButton(mCanvas, mPaint);
mButtonOption.DrawImageButton(mCanvas, mPaint);
break;
case GAME_LOAD:
mCanvas.drawBitmap(mBitMenuBG, 0, 0, mPaint);
mCanvas.drawBitmap(mBitMenuTitle, (mScreenWidth - mBitMenuTitle.getWidth()) >> 1,0, mPaint);
mButtonTeach.DrawImageButton(mCanvas, mPaint);
mButtonOption.DrawImageButton(mCanvas, mPaint);
mCanvas.drawBitmap(mLoadBack, (mScreenWidth - mLoadBack.getWidth()) >> 1, mScreenHeight >> 1, mPaint);
//这里计算进度条进度
Loading();
break;
case GAME_TEACH:
mCanvas.drawBitmap(mBitTeach, 0, 0, mPaint);
mCanvas.drawBitmap(mMomo, (mScreenWidth >> 1) - (mMomo.getWidth()>> 1), 20, mPaint);
String str1 = "欢迎光临雨松MOMO的博客 资源已经全部加载完成";
drawRimString(mCanvas,str1,Color.BLACK,(mScreenWidth >> 1) - (((int)mPaint.measureText(str1)) >> 1), mScreenHeight >> 1);
break;
case GAME_OPTION:
mCanvas.drawBitmap(mBitTeach, 0, 0, mPaint);
mCanvas.drawBitmap(mMomo, (mScreenWidth >> 1) - (mMomo.getWidth()>> 1), 20, mPaint);
String str2 = "设置界面暂未 开放 雨松MOMO:xuanyusong@gmail.com";
drawRimString(mCanvas,str2,Color.BLACK,(mScreenWidth >> 1) - (((int)mPaint.measureText(str2)) >> 1), mScreenHeight >> 1);
break;
}
}
private void init() {
mBitMenuBG = ReadBitMap(mContext,R.drawable.ui_background_normal);
mBitMenuTitle= ReadBitMap(mContext,R.drawable.main_ui_title_cn);
mMenuAnim = new Animation(mContext,new int []{R.drawable.l1,R.drawable.l2,R.drawable.l3,R.drawable.l4},true);
mMenuAnimPosX = mScreenWidth;
mButtonTeach = new ImageButton(mContext,R.drawable.main_ui_button_0,mTeachPosX,mTeachPosY);
mButtonOption = new ImageButton(mContext,R.drawable.main_ui_button_1,mOptionPosX,mOptionPosY);
mLoadBack = ReadBitMap(mContext,R.drawable.ui_slot_03);
mLoadShow = ReadBitMap(mContext,R.drawable.ui_slot_04);
mBitTeach = ReadBitMap(mContext,R.drawable.teach);
mMomo = ReadBitMap(mContext,R.drawable.jay);
}
private void setGameState(int newState) {
mState = newState;
}
public void UpdateTouchEvent(int x, int y) {
switch(mState) {
case GAME_MENU:
if(mButtonTeach.IsClick(x, y)) {
//教学图片按钮被按下
setGameState(GAME_LOAD);
}else if(mButtonOption.IsClick(x, y)) {
//设置图片按钮被按下
setGameState(GAME_OPTION);
}
break;
}
}
/**
* 读取本地资源的图片
*
* @param context
* @param resId
* @return
*/
public Bitmap ReadBitMap(Context context, int resId) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
// 获取资源图片
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is, null, opt);
}
/**
* 绘制画带阴影的文字
* @param canvas
* @param str
* @param color
* @param x
* @param y
*/
public final void drawRimString(Canvas canvas, String str, int color,int x, int y) {
int backColor = mPaint.getColor();
mPaint.setColor(~color);
canvas.drawText(str, x + 1, y, mPaint);
canvas.drawText(str, x, y + 1, mPaint);
canvas.drawText(str, x - 1, y, mPaint);
canvas.drawText(str, x, y - 1, mPaint);
mPaint.setColor(color);
canvas.drawText(str, x, y, mPaint);
mPaint.setColor(backColor);
}
/**
* 程序切割图片
* @param bitmap
* @param x
* @param y
* @param w
* @param h
* @return
*/
public Bitmap BitmapClipBitmap(Bitmap bitmap,int x, int y, int w, int h) {
return Bitmap.createBitmap(bitmap, x, y, w, h);
}
public void Loading() {
// 这里应该是去读取资源, 由于没有大量的资源 这里我暂时只用线程去等待
- 1
- 2
- 3
- 4
- 5
- 6
前往页