Android编程之View简单学习示例

 更新时间:2015年10月29日 15:08:32   作者:阳光岛主  
这篇文章主要介绍了Android编程之View简单学习示例,以一个实例形式较为详细的分析了View的功能、定义及使用技巧,需要的朋友可以参考下

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

相关文章

  • Angular.JS中的指令与参数详解

    Angular.JS中的指令与参数详解

    指令(Directives)是所有AngularJS应用最重要的部分。而指令难点就在于参数,所以下面这篇文章主要给大家介绍了Angular.JS中指令与参数的相关资料,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Android 中使用 dlib+opencv 实现动态人脸检测功能

    Android 中使用 dlib+opencv 实现动态人脸检测功能

    完成 Android 相机预览功能以后,在此基础上我使用 dlib 与 opencv 库做了一个关于人脸检测的 demo。接下来通过本文给大家介绍Android 中使用 dlib+opencv 实现动态人脸检测功能 ,需要的朋友可以参考下
    2018-11-11
  • Android NDK开发(C语言--动态内存分配)

    Android NDK开发(C语言--动态内存分配)

    这篇文章主要介绍了Android NDK开发 C语言--动态内存分配
    2021-12-12
  • JankMan-极致的卡顿分析系统

    JankMan-极致的卡顿分析系统

    这篇文章主要为大家介绍了JankMan-极致的卡顿分析系统使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Flutter开发setState能否在build中直接调用详解

    Flutter开发setState能否在build中直接调用详解

    这篇文章主要为大家介绍了Flutter开发setState能否在build中直接调用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • android12 SD如何动态申请读写权限

    android12 SD如何动态申请读写权限

    这篇文章主要给大家介绍了关于android12 SD如何动态申请读写权限的相关资料,从Android 6.0开始,权限不再是在manifest⽂件中粘贴⼀下即可,这时候权限也正式⾛进⼤家的视野,需要的朋友可以参考下
    2023-07-07
  • Android实现从底部弹出的Dialog示例(一)

    Android实现从底部弹出的Dialog示例(一)

    这篇文章主要介绍了Android实现从底部弹出的Dialog示例(一),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • Android获取设备传感器的方法

    Android获取设备传感器的方法

    这篇文章主要为大家详细介绍了Android获取设备传感器的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Android仿微信菜单(Menu)(使用C#和Java分别实现)

    Android仿微信菜单(Menu)(使用C#和Java分别实现)

    这篇文章主要介绍了Android仿微信菜单(Menu)(使用C#和Java分别实现),本文分别给出C#和Java版的运行效果及实现代码,需要的朋友可以参考下
    2015-06-06
  • Android开发vsts agent支持自定义task过程详解

    Android开发vsts agent支持自定义task过程详解

    这篇文章主要介绍了Android开发vsts agent支持自定义task过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04

最新评论