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程序设计有所帮助。