欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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编程之View简单学习示例

完整实例代码代码点击此处。

希望本文所述对大家android程序设计有所帮助。

上一篇:

下一篇: