Android编程之View简单学习示例
程序员文章站
2023-12-11 21:46:16
本文实例讲述了android编程之view简单学习示例。分享给大家供大家参考,具体如下:
view,是android的一个超类,这个类几乎包含了所有的屏幕类型。每一个vi...
本文实例讲述了android编程之view简单学习示例。分享给大家供大家参考,具体如下:
view,是android的一个超类,这个类几乎包含了所有的屏幕类型。每一个view都有一个用于绘图的画布,这个画布可以进行任意扩展。
在游戏开发中叶可以自定义视图(view),这个画布的功能更能满足我们在游戏开发中的需要。在android中,任何一个view类都只需重写ondraw 方法来实现界面显示,自定义的视图可以是复杂的3d实现,也可以是非常简单的文本形式等。
游戏的核心是不断地绘图和刷新界面,android中提供了 invalidate 方法来实现界面刷新。注意,invalidate 不能直接在线程中调用, 就是不可以在子线程中调用,因此它违背了 android的单线程模型:android ui操作并不是线程安全的,并且这些操作必须在ui 线程中执行,因此android中最常用的方法就是利用handler来实现ui线程的更新。 其实用 asynctask 也可以。
具体示例:
activity:
public class activity01 extends activity { private static final string tag = "mthread"; private static final int refresh = 0x000001; private gameview mgameview = null; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); this.mgameview = new gameview(this); mgameview.x = 320.0f; mgameview.y = 120.0f; setcontentview(mgameview); new thread(new gamethread()).start(); } handler myhandler = new handler() { @override public void handlemessage(message msg) { switch (msg.what) { case activity01.refresh: mgameview.invalidate(); // repaint view break; } super.handlemessage(msg); } }; class gamethread implements runnable { @override public void run() { while (!thread.currentthread().isinterrupted()) { message message = new message(); message.what = activity01.refresh; activity01.this.myhandler.sendmessage(message); try { thread.sleep(1000); } catch (interruptedexception e) { thread.currentthread().interrupt(); } } } } @override public boolean ontouchevent(motionevent event) { if(event.getaction() == motionevent.action_down){ mgameview.x = event.getx(); mgameview.y = event.gety(); } return true; } @override public boolean onkeydown(int keycode, keyevent event) { if(keycode == keyevent.keycode_back){ this.finish(); } return true; } }
gameview:
public class gameview extends view { int count = 0; float x = 0, y = 0; public gameview(context context) { super(context); } public void ondraw(canvas canvas) { if (count < 100) { count++; } else { count = 0; } paint mpaint = new paint(); switch (count % 4) { case 0: mpaint.setcolor(color.blue); break; case 1: mpaint.setcolor(color.green); break; case 2: mpaint.setcolor(color.red); break; case 3: mpaint.setcolor(color.yellow); break; default: mpaint.setcolor(color.white); break; } canvas.drawrect(x - 40, y - 20, x + 40, y + 20, mpaint); } }
运行效果:
完整实例代码代码点击此处。
希望本文所述对大家android程序设计有所帮助。