Android中SurfaceView用法简单实例
程序员文章站
2023-11-26 17:09:10
本文实例讲述了android中surfaceview用法。分享给大家供大家参考,具体如下:
这里贴上一个小程序代码,主要运用surfaceview来实现在屏幕上画一个圆,...
本文实例讲述了android中surfaceview用法。分享给大家供大家参考,具体如下:
这里贴上一个小程序代码,主要运用surfaceview来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置
代码:
activity:
package com.view; import android.app.activity; import android.os.bundle; import android.view.window; import android.view.windowmanager; public class mainactivity extends activity { /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // 隐藏状态栏 this.getwindow().setflags(windowmanager.layoutparams.flag_fullscreen, windowmanager.layoutparams.flag_fullscreen); // 把activity的标题去掉 requestwindowfeature(window.feature_no_title); // 设置布局 this.setcontentview(new mysurfaceview(this)); } }
surfaceview:
package com.view; import android.content.context; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; import android.view.keyevent; import android.view.motionevent; import android.view.surfaceholder; import android.view.surfaceholder.callback; import android.view.surfaceview; public class mysurfaceview extends surfaceview implements runnable, callback { private surfaceholder mholder; // 用于控制surfaceview private thread t; // 声明一条线程 private boolean flag; // 线程运行的标识,用于控制线程 private canvas mcanvas; // 声明一张画布 private paint p; // 声明一支画笔 private int x = 50, y = 50, r = 10; // 圆的坐标和半径 public mysurfaceview(context context) { super(context); mholder = getholder(); // 获得surfaceholder对象 mholder.addcallback(this); // 为surfaceview添加状态监听 p = new paint(); // 创建一个画笔对象 p.setcolor(color.white); // 设置画笔的颜色为白色 setfocusable(true); // 设置焦点 } /** * 自定义一个方法,在画布上画一个圆 */ public void draw() { mcanvas = mholder.lockcanvas(); // 获得画布对象,开始对画布画画 mcanvas.drawrgb(0, 0, 0); // 把画布填充为黑色 mcanvas.drawcircle(x, y, r, p); // 画一个圆 mholder.unlockcanvasandpost(mcanvas); // 完成画画,把画布显示在屏幕上 } /** * 当surfaceview创建的时候,调用此函数 */ @override public void surfacecreated(surfaceholder holder) { t = new thread(this); // 创建一个线程对象 flag = true; // 把线程运行的标识设置成true t.start(); // 启动线程 } /** * 当surfaceview的视图发生改变的时候,调用此函数 */ @override public void surfacechanged(surfaceholder holder, int format, int width, int height) { } /** * 当surfaceview销毁的时候,调用此函数 */ @override public void surfacedestroyed(surfaceholder holder) { flag = false; // 把线程运行的标识设置成false } /** * 当屏幕被触摸时调用 */ @override public boolean ontouchevent(motionevent event) { x = (int) event.getx(); // 获得屏幕被触摸时对应的x轴坐标 y = (int) event.gety(); // 获得屏幕被触摸时对应的y轴坐标 return true; } /** * 当用户按键时调用 */ @override public boolean onkeydown(int keycode, keyevent event) { if(keycode == keyevent.keycode_dpad_up){ //当用户点击↑键时 y--; //设置y轴坐标减1 } return super.onkeydown(keycode, event); } @override public void run() { while (flag) { draw(); // 调用自定义画画方法 try { thread.sleep(50); // 让线程休息50毫秒 } catch (interruptedexception e) { e.printstacktrace(); } } } }
mysurfaceview首先继承surfaceview,然后实现runnable和callback接口
重写了runnable的run方法和callback的surfacecreated(surfaceholder holder),surfacechanged(surfaceholder holder, int format, int width,int height),surfacedestroyed(surfaceholder holder)方法,
还实现了ontouchevent(motionevent event),onkeydown(int keycode, keyevent event)方法来,详细的在代码里已注释。
希望本文所述对大家android程序设计有所帮助。