参考资料: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));}}效果图:

更多相关文章

  1. Android属性动画---Property Animation(六)
  2. Android(安卓)Input系统源码分析一(启动与初始化)
  3. Android(安卓)Ap 开发 设计模式第一篇:迭代器模式
  4. Activity的四种加载模式 -- singleTask 和 singleInstance模式
  5. Retrofit
  6. Android——SharedPreferences数据存储
  7. android拨打电话和发送短信核心代码
  8. android 百度地图类参考 MKGeneralListener
  9. Android33_Animations使用(一)

随机推荐

  1. android 反编译入门
  2. 从android 里面读取配置文件
  3. Android(安卓)文件存储的简单实现
  4. Android曲线绘制demo
  5. TextView中style的应用
  6. Android(安卓)Password Manager
  7. android 保持屏幕唤醒状态
  8. [Android(安卓)特效] Android(安卓)通过
  9. 「React Native」Android返回键监听
  10. android用Popup弹出窗(PopupWindow的使用