安卓surfaceview使用之游戏首页开发
2016-01-30 22:19
393 查看
游戏首页图片代码:(红色标记为sufaceview的一般使用模版)[/b]public class WelcomeView extends SurfaceView implements SurfaceHolder.Callback //实现生命周期回调接口{ static Bitmap b;
SurfaceHolder myholder;
Paint paint; //画笔 int currentAlpha = 0; //当前的不透明值 int sleepTime = 100; //动画的时延ms
float screenWidth, screenHeight;
float currentX; //图片位置 float currentY;
public WelcomeView(Context context) { super(context); b = BitmapFactory.decodeResource(this.getResources(), R.drawable.welcome);//加载图片 this.getHolder().addCallback(this); //设置生命周期回调接口的实现者 paint = new Paint(); //创建画笔 paint.setAntiAlias(true); //打开抗锯齿
WindowManager wm = (WindowManager) getContext()//获取屏幕宽度 .getSystemService(Context.WINDOW_SERVICE);
screenWidth = wm.getDefaultDisplay().getWidth(); screenHeight = wm.getDefaultDisplay().getHeight();
currentX = screenWidth / 2 - b.getWidth() / 2;//图片的起始坐标 currentY = screenHeight / 2 - b.getHeight() / 2; myholder = this.getHolder(); //要初始化下 }
public void myDraw(Canvas canvas) {
canvas.save();
//绘制黑填充矩形清背景 paint.setColor(Color.BLACK);//设置画笔颜色 paint.setAlpha(255); canvas.drawRect(0, 0, screenWidth, screenHeight, paint); //进行平面贴图 paint.setAlpha(currentAlpha); //设置当前不透明度 canvas.drawBitmap(b, currentX, currentY, paint); canvas.restore();
}
public void surfaceCreated(SurfaceHolder holder) //创建时被调用 { mythread mythread1=new mythread(); mythread1.start(); }
class mythread extends Thread { public void run() { for (int i = 255; i > -10; i = i - 10) {//动态更改图片的透明度值并不断重绘 currentAlpha = i; if (currentAlpha < 0) { currentAlpha = 0; } Canvas canvas = myholder.lockCanvas();//获取画布 try { synchronized (myholder) { myDraw(canvas);//绘制 } } catch (Exception e) { e.printStackTrace(); } finally { if (canvas != null) { myholder.unlockCanvasAndPost(canvas); } }
try { Thread.sleep(sleepTime); } catch (Exception e) { e.printStackTrace(); } } //此时发送消息到主activity,调用下一个界面 //activity.handler.sendEmptyMessage(Constant.COMMAND_GOTO_MENU_VIEW); } }
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {//画布改变时调用 }
public void surfaceDestroyed(SurfaceHolder arg0) {//销毁时被调用 }}
SurfaceHolder myholder;
Paint paint; //画笔 int currentAlpha = 0; //当前的不透明值 int sleepTime = 100; //动画的时延ms
float screenWidth, screenHeight;
float currentX; //图片位置 float currentY;
public WelcomeView(Context context) { super(context); b = BitmapFactory.decodeResource(this.getResources(), R.drawable.welcome);//加载图片 this.getHolder().addCallback(this); //设置生命周期回调接口的实现者 paint = new Paint(); //创建画笔 paint.setAntiAlias(true); //打开抗锯齿
WindowManager wm = (WindowManager) getContext()//获取屏幕宽度 .getSystemService(Context.WINDOW_SERVICE);
screenWidth = wm.getDefaultDisplay().getWidth(); screenHeight = wm.getDefaultDisplay().getHeight();
currentX = screenWidth / 2 - b.getWidth() / 2;//图片的起始坐标 currentY = screenHeight / 2 - b.getHeight() / 2; myholder = this.getHolder(); //要初始化下 }
public void myDraw(Canvas canvas) {
canvas.save();
//绘制黑填充矩形清背景 paint.setColor(Color.BLACK);//设置画笔颜色 paint.setAlpha(255); canvas.drawRect(0, 0, screenWidth, screenHeight, paint); //进行平面贴图 paint.setAlpha(currentAlpha); //设置当前不透明度 canvas.drawBitmap(b, currentX, currentY, paint); canvas.restore();
}
public void surfaceCreated(SurfaceHolder holder) //创建时被调用 { mythread mythread1=new mythread(); mythread1.start(); }
class mythread extends Thread { public void run() { for (int i = 255; i > -10; i = i - 10) {//动态更改图片的透明度值并不断重绘 currentAlpha = i; if (currentAlpha < 0) { currentAlpha = 0; } Canvas canvas = myholder.lockCanvas();//获取画布 try { synchronized (myholder) { myDraw(canvas);//绘制 } } catch (Exception e) { e.printStackTrace(); } finally { if (canvas != null) { myholder.unlockCanvasAndPost(canvas); } }
try { Thread.sleep(sleepTime); } catch (Exception e) { e.printStackTrace(); } } //此时发送消息到主activity,调用下一个界面 //activity.handler.sendEmptyMessage(Constant.COMMAND_GOTO_MENU_VIEW); } }
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {//画布改变时调用 }
public void surfaceDestroyed(SurfaceHolder arg0) {//销毁时被调用 }}
相关文章推荐
- fragment全攻略
- Activity详解
- JDBC利用ResultSet遍历
- JDBC利用PreparedStatement实现数据库增删改
- JDBC利用Statement接口实现增删改操作
- 关于异常处理
- 1.JDBC连接数据库
- 240,eclipse快捷键
- 第一次尝试编写java
- 1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库
- 正则表达式
- Java单元测试工具:JUnit4(三)——JUnit详解之运行流程及常用注解
- BestCoder Round #70 1001 Jam's math problem
- [转]easyui tree 模仿ztree 使用扁平化加载json
- JS变量的声明被提前到作用域顶部,赋值则保留在原地
- CentOS6.4挂载读写NTFS分区 (重要)
- 移动WEB模拟原声APP滑动删除
- 各种排序算法整理
- hdu 2095 非异或 代码
- 关于getScrollX的理解