一·首先目录结构:

有三个类,第一个是aplaneactivity主类,然后建立WelcomeView和HelpView类

第二是开发所需要的图片放在:

第三效果图:

点击开始可以跳转到第二页面。

第四代码:

首先aplaneactivity主类

package com.aplane; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Window; import android.view.WindowManager; public class aplaneactivity extends Activity { Handler myHanlder = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { initHelpView(); } } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 全屏 requestWindowFeature(Window.FEATURE_NO_TITLE); //标题栏除掉 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //初始化欢迎界面 this.initWelocmeView(); } //初始化欢迎界面 private void initWelocmeView() { this.setContentView(new WelcomeView(this, this)); } //初始化帮助界面 private void initHelpView() { this.setContentView(new HelpView(this,this)); } }

其次建立WelcomeView class类

package com.aplane; import java.util.HashMap; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.media.AudioManager; import android.media.SoundPool; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; public class WelcomeView extends SurfaceView implements SurfaceHolder.Callback { aplaneactivity activity;// activity的引用 private TutorialThread thread;// 刷帧的线程,是内部类刷新欢迎界面线程 Bitmap startGame;// 开始游戏菜单 Bitmap help;// 帮助菜单 Paint paint;// 用于改变透明度 public WelcomeView(Context context, aplaneactivity activity) {// 构造器 super(activity); this.activity = activity;// 得到activity的引用 initBitmap();// 初始化图片资源 getHolder().addCallback(this); // 初始化线程 this.thread = new TutorialThread(getHolder(), this); } private void initBitmap() {// 初始化图片资源的方法 paint = new Paint(); // 开始 startGame = BitmapFactory.decodeResource(getResources(), R.drawable.startgame); // 帮助 help = BitmapFactory.decodeResource(getResources(), R.drawable.help); // 退出 } public void onDraw(Canvas canvas) { canvas.drawColor(Color.BLACK);// 清屏 canvas.drawBitmap(startGame, 170, 100, paint);// 200表示左右,100表示上下 canvas.drawBitmap(help, 170, 160, paint); } @Override public void surfaceCreated(SurfaceHolder holder) { this.thread.setFlag(true);// 设置循环标记位 this.thread.start();// 启动绘制线程 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } // 必须写的 @Override public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true;// 循环标记 thread.setFlag(false); while (retry) { try { thread.join();// 等待线程的结束 retry = false;// 设置循环标记停止循环 } catch (InterruptedException e) { }// 不断地循环,直到刷帧线程结束 } } public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) {// 屏幕被按下 double x = event.getX(); double y = event.getY(); if (x > 170 && x < 170 + startGame.getWidth() && y > 100 && y < 100 + startGame.getHeight()) { activity.myHanlder.sendEmptyMessage(1); } } return super.onTouchEvent(event);// 调用基类的方法 } // 必须写的 class TutorialThread extends Thread {// 刷帧线程 private int span = 100;// 睡眠的毫秒数 private SurfaceHolder surfaceHolder; private WelcomeView welcomeView;// 欢迎界面的引用 private boolean flag = false; public TutorialThread(SurfaceHolder surfaceHolder, WelcomeView welcomeView) {// 构造器 this.surfaceHolder = surfaceHolder;// SurfaceHolder的引用 this.welcomeView = welcomeView;// 欢迎界面的引用 } public void setFlag(boolean flag) {// 设置标准位 this.flag = flag; } public void run() {// 重写的run方法 Canvas c; while (this.flag) {// 循环 c = null; try { // 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null c = this.surfaceHolder.lockCanvas(null); synchronized (this.surfaceHolder) {// 同步 welcomeView.onDraw(c);// 调用绘制方法 } } finally {// 用finally保证一定被执行 if (c != null) { // 更新屏幕显示内容 this.surfaceHolder.unlockCanvasAndPost(c); } } try { Thread.sleep(span);// 睡眠指定毫秒数 } catch (Exception e) {// 捕获异常 e.printStackTrace();// 打印异常信息 } } } } }

最后建立HelpView class类

package com.aplane; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; public class HelpView extends SurfaceView implements SurfaceHolder.Callback { aplaneactivity activity;// activity的引用 private TutorialThread thread;// 刷帧的线程,是内部类刷新欢迎界面线程 Paint paint;// 用于改变透明度 Bitmap help; public HelpView(Context context, aplaneactivity activity) { super(activity); this.activity = activity;// 得到activity的引用 getHolder().addCallback(this); // 初始化线程 this.thread = new TutorialThread(getHolder(), this); initBitmap();// 初始化图片资源 } private void initBitmap() { help = BitmapFactory.decodeResource(getResources(), R.drawable.help); } //绘制图片 public void onDraw(Canvas canvas) { canvas.drawColor(Color.BLACK);// 清屏 canvas.drawBitmap(help, 170, 160, paint); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { this.thread.setFlag(true);// 设置循环标记位 this.thread.start();// 启动绘制线程 } @Override public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true;// 循环标记 thread.setFlag(false); while (retry) { try { thread.join();// 等待线程的结束 retry = false;// 设置循环标记停止循环 } catch (InterruptedException e) { }// 不断地循环,直到刷帧线程结束 } } public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) {// 屏幕被按下 double x = event.getX(); double y = event.getY(); if (x > 170 && x < 170 + help.getWidth() && y > 160 && y < 160 + help.getHeight()) { activity.myHanlder.sendEmptyMessage(2); } } return super.onTouchEvent(event);// 调用基类的方法 } // 必须写的- class TutorialThread extends Thread {// 刷帧线程 private int span = 100;// 睡眠的毫秒数 private SurfaceHolder surfaceHolder; private HelpView helpView;// 欢迎界面的引用 private boolean flag = false; public TutorialThread(SurfaceHolder surfaceHolder, HelpView helpView) {// 构造器 this.surfaceHolder = surfaceHolder;// SurfaceHolder的引用 this.helpView = helpView;// 欢迎界面的引用 } public void setFlag(boolean flag) {// 设置标准位 this.flag = flag; } public void run() {// 重写的run方法 Canvas c; while (this.flag) {// 循环 c = null; try { // 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null c = this.surfaceHolder.lockCanvas(null); synchronized (this.surfaceHolder) {// 同步 helpView.onDraw(c);// 调用绘制方法 } } finally {// 用finally保证一定被执行 if (c != null) { // 更新屏幕显示内容 this.surfaceHolder.unlockCanvasAndPost(c); } } try { Thread.sleep(span);// 睡眠指定毫秒数 } catch (Exception e) {// 捕获异常 e.printStackTrace();// 打印异常信息 } } } } }

OK,搞定了...

更多相关文章

  1. 竖直方向,一次滚动一个页面的封装库。
  2. android中的常见类(2)
  3. android 实例和分析
  4. 字节跳动面试官:Android源码的Binder权限是如何控制?
  5. android Support Annotations(注解支持)
  6. Android9.0 SIM卡初始化---更新数据(代码 高通9.0代码)
  7. Android(安卓)修改开机画面
  8. android Toast大全
  9. Android遍历数组、集合和Map

随机推荐

  1. Android(安卓)生成jar包(2)
  2. Android(安卓)NDK——必知必会之Native线
  3. android解决dialog和popupwindow的BadTok
  4. Android(安卓)集成新浪微博分享及授权 (
  5. Android(安卓)9.0 flash播放器播放swf源
  6. Android(安卓)Intent用法总结
  7. Android(安卓)Studio 项目导入的正确姿势
  8. Android中仿微信选择图片并展示在Recycle
  9. android使用BottomNavigationView与NavCo
  10. Android之AsyncTask的用法