当前位置: 移动技术网 > 移动技术>移动开发>Android > Android编程之View简单学习示例

Android编程之View简单学习示例

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网