Android(安卓)游戏开发之SurfaceView的简单使用
16lz
2021-01-26
参考资料:Android游戏编程之从零开始
涉及的相关知识点:1、Callback一个SurfaceView一定要实现一个SurfaceHolder.Callback接口。以便在底层的Surface状态发生变化的时候通知View,该接口需要实现以下3个方法:publicvoidsurfaceCreated(SurfaceHolderholder){}publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){}publicvoidsurfaceDestroyed(SurfaceHolderholder){}2、SurfaceHolder这是一个用于控制surface的接口,它提供了控制surface的大小,格式等SurfaceView的getHolder()函数可以获取SurfaceHolder对象,Surface就在SurfaceHolder对象内。3、具体代码MySurfaceView.javapackagecn.llbb.testsurfaceviewdemo;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.Path;importandroid.graphics.Rect;importandroid.graphics.RectF;importandroid.view.SurfaceHolder;importandroid.view.SurfaceHolder.Callback;importandroid.view.SurfaceView;publicclassMySurfaceViewextendsSurfaceViewimplementsCallback{privateSurfaceHoldersfh;privateCanvascanvas;privatePaintpaint;publicMySurfaceView(Contextcontext){super(context);sfh=getHolder();sfh.addCallback(this);paint=newPaint();paint.setColor(Color.RED);setFocusable(true);}publicvoidsurfaceCreated(SurfaceHolderholder){MyDraw();}publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){}publicvoidsurfaceDestroyed(SurfaceHolderholder){}privatevoidMyDraw(){try{canvas=sfh.lockCanvas();if(canvas!=null){canvas.drawColor(Color.WHITE);canvas.drawText("drawtext",10,10,paint);canvas.drawPoint(10,20,paint);canvas.drawPoints(newfloat[]{10,30,30,30},paint);canvas.drawLine(10,40,50,40,paint);canvas.drawLines(newfloat[]{10,50,50,50,70,50,110,50},paint);canvas.drawRect(10,60,40,100,paint);Rectrect=newRect(10,110,60,130);canvas.drawRect(rect,paint);RectFrectf=newRectF(10,140,60,170);canvas.drawRoundRect(rectf,20,20,paint);canvas.drawCircle(20,200,20,paint);canvas.drawArc(newRectF(150,20,200,70),0,230,true,paint);canvas.drawOval(newRectF(150,80,180,100),paint);Pathpath=newPath();path.moveTo(160,150);path.lineTo(200,150);path.lineTo(180,200);path.close();canvas.drawPath(path,paint);Pathpathcircle=newPath();pathcircle.addCircle(130,260,20,Path.Direction.CCW);canvas.drawTextOnPath("pathtext",pathcircle,10,20,paint);}}catch(Exceptione){}finally{sfh.unlockCanvasAndPost(canvas);}}}MainActivity.javapackagecn.llbb.testcanvasdemo;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.Window;importandroid.view.WindowManager;publicclassMainActivityextendsActivity{protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);//getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(newMySurfaceView(this));}}效果图:
更多相关文章
- Android属性动画---Property Animation(六)
- Android(安卓)Input系统源码分析一(启动与初始化)
- Android(安卓)Ap 开发 设计模式第一篇:迭代器模式
- Activity的四种加载模式 -- singleTask 和 singleInstance模式
- Retrofit
- Android——SharedPreferences数据存储
- android拨打电话和发送短信核心代码
- android 百度地图类参考 MKGeneralListener
- Android33_Animations使用(一)