Android编程之View简单学习示例_Android

本文实例讲述了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编程
,以便于您获取更多的相关知识。

时间: 2024-12-06 09:38:37

Android编程之View简单学习示例_Android的相关文章

Android编程之View简单学习示例

本文实例讲述了Android编程之View简单学习示例.分享给大家供大家参考,具体如下: View,是Android的一个超类,这个类几乎包含了所有的屏幕类型.每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展. 在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要.在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等. 游戏的核心是不断地绘图和刷新界面,An

Android编程之SurfaceView实例详解_Android

本文实例讲述了Android编程之SurfaceView用法.分享给大家供大家参考,具体如下: 关于surfaceView相关知识: View和SurfaceView主要区别: 1. View只能在UI线程中刷新,而SurfaceView可以在子线程中刷新 2. SurfaceView可以控制刷新频率 SurfaceView几个重要的方法: 1. 继承SurfaceView 后调用getHolder()方法可以获取到mSurfaceHolder对象这个对于可以控制SurfaceView的绘制 2

android编程之menu按键功能实现方法_Android

本文实例讲述了android编程之menu按键功能实现方法.分享给大家供大家参考.具体分析如下: android应用程序可以通过menu按键弹出菜单,现在通过menu按键弹出一个拥有两个选项的菜单.点击第一个按键,文本框会显示"第1个按键",点击第二个按键,文本框会显示"第2个按键" package com.test_menu; import android.app.Activity; import android.os.Bundle; import android

Android编程之MD5加密算法实例分析_Android

本文实例分析了Android编程之MD5加密算法.分享给大家供大家参考,具体如下: Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包.实际上与J2SE平台一模一样. 算法签名: 复制代码 代码如下: String getMD5(String val) throws NoSuchAlgorithmException 输入一个String(需要加密的文本),得到一个加密输出String(加密后的文本) pa

Android编程之Sdcard相关代码集锦_Android

本文实例讲述了Android编程之Sdcard相关代码.分享给大家供大家参考,具体如下: 1. 检测Sdcard是否可用: public static boolean sdCardIsAvailable() { String status = Environment.getExternalStorageState(); if (!status.equals(Environment.MEDIA_MOUNTED)) { return false; } return true; } 2. 获得程序在s

Android编程之Animation动画详解_Android

本文实例讲述了Android编程之Animation动画用法.分享给大家供大家参考,具体如下: Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大多数的控件中. 二.Animations的分类 Animations从总体上可以分为两大类: 1.Tweened Animations:该类Animations提供了旋转.移动.伸展

Android编程之EditText常见操作示例

本文实例讲述了Android编程之EditText常见操作.分享给大家供大家参考,具体如下: 1.获取光标选中的文字 EditText view = (EditText)findViewById(R.id.edt); int start = view.getSelectionStart(); int end = view.getSelectionEnd(); //由于选择的位置和你开始选择文字的顺序有关,所以最好重新判断整理一下顺序,免得出错 if (start>end) { start = s

Android编程之ListPreference用法实例分析_Android

本文实例讲述了Android编程之ListPreference用法.分享给大家供大家参考,具体如下: 先展示一下效果图,如下所示: 项目代码如下: package com.my.listpreference; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.On

Android编程之OpenGL绘图技巧总结_Android

本文实例讲述了Android编程之OpenGL绘图技巧.分享给大家供大家参考,具体如下: 很久不用OpenGL ES绘图,怕自己忘记了,于是重新复习一遍,顺便原理性的东西总结如下: 1. Android 3D坐标系统 如图: Android的三维坐标系统中: 坐标原点位于中央, X轴从左向右延伸,原点左边的值为负数,右边为正数: Y轴从下向上延伸,原点下边的值为负数,上边为正数: Z轴屏幕里面向外面延伸,屏幕里面为负数,外面为正数. 2. 开发工具(OpenGL和OpenGL ES)介绍Open