Android中SurfaceView用法简单实例
本文实例讲述了Android中SurfaceView用法。分享给大家供大家参考,具体如下:
这里贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置
代码:
Activity:
packagecom.view; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.Window; importandroid.view.WindowManager; publicclassMainActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //隐藏状态栏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //把Activity的标题去掉 requestWindowFeature(Window.FEATURE_NO_TITLE); //设置布局 this.setContentView(newMySurfaceView(this)); } }
SurfaceView:
packagecom.view; importandroid.content.Context; importandroid.graphics.Canvas; importandroid.graphics.Color; importandroid.graphics.Paint; importandroid.view.KeyEvent; importandroid.view.MotionEvent; importandroid.view.SurfaceHolder; importandroid.view.SurfaceHolder.Callback; importandroid.view.SurfaceView; publicclassMySurfaceViewextendsSurfaceViewimplementsRunnable,Callback{ privateSurfaceHoldermHolder;//用于控制SurfaceView privateThreadt;//声明一条线程 privatebooleanflag;//线程运行的标识,用于控制线程 privateCanvasmCanvas;//声明一张画布 privatePaintp;//声明一支画笔 privateintx=50,y=50,r=10;//圆的坐标和半径 publicMySurfaceView(Contextcontext){ super(context); mHolder=getHolder();//获得SurfaceHolder对象 mHolder.addCallback(this);//为SurfaceView添加状态监听 p=newPaint();//创建一个画笔对象 p.setColor(Color.WHITE);//设置画笔的颜色为白色 setFocusable(true);//设置焦点 } /** *自定义一个方法,在画布上画一个圆 */ publicvoidDraw(){ mCanvas=mHolder.lockCanvas();//获得画布对象,开始对画布画画 mCanvas.drawRGB(0,0,0);//把画布填充为黑色 mCanvas.drawCircle(x,y,r,p);//画一个圆 mHolder.unlockCanvasAndPost(mCanvas);//完成画画,把画布显示在屏幕上 } /** *当SurfaceView创建的时候,调用此函数 */ @Override publicvoidsurfaceCreated(SurfaceHolderholder){ t=newThread(this);//创建一个线程对象 flag=true;//把线程运行的标识设置成true t.start();//启动线程 } /** *当SurfaceView的视图发生改变的时候,调用此函数 */ @Override publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth, intheight){ } /** *当SurfaceView销毁的时候,调用此函数 */ @Override publicvoidsurfaceDestroyed(SurfaceHolderholder){ flag=false;//把线程运行的标识设置成false } /** *当屏幕被触摸时调用 */ @Override publicbooleanonTouchEvent(MotionEventevent){ x=(int)event.getX();//获得屏幕被触摸时对应的X轴坐标 y=(int)event.getY();//获得屏幕被触摸时对应的Y轴坐标 returntrue; } /** *当用户按键时调用 */ @Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_DPAD_UP){//当用户点击↑键时 y--;//设置Y轴坐标减1 } returnsuper.onKeyDown(keyCode,event); } @Override publicvoidrun(){ while(flag){ Draw();//调用自定义画画方法 try{ Thread.sleep(50);//让线程休息50毫秒 }catch(InterruptedExceptione){ e.printStackTrace(); } } } }
MySurfaceView首先继承SurfaceView,然后实现Runnable和Callback接口
重写了Runnable的run方法和Callback的surfaceCreated(SurfaceHolderholder),surfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight),surfaceDestroyed(SurfaceHolderholder)方法,
还实现了onTouchEvent(MotionEventevent),onKeyDown(intkeyCode,KeyEventevent)方法来,详细的在代码里已注释。
希望本文所述对大家Android程序设计有所帮助。