Android的View类使用
16lz
2021-12-04
View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘画的画布,这个画布可以进行任意的扩展。在Android中,任何一个View类都只需要重写onDraw方法来实现界面显示,视图可以显示简单的文本,也可以显示复杂的3D。游戏的核心就是不断的刷新界面和绘制界面,Android提供了invalidate方法来实现界面的刷新,在Android中经常借助Handler实现界面的刷新。废话就不多说了,请下面的例子。
效果图如下:
入口Activity代码如下:
package nyl.viewdemo1; import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message; public class MainActivity extends Activity {private GameView mGameView;public static final int REFRESH = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //显示GameView游戏窗体 mGameView = new GameView(this); setContentView(mGameView); //开启线程 new Thread(new GameThread()).start(); } /** * 线程的实现有两种方式: * 第一:实现Runnable接口,重新run()方法; * 第二:继承Thread类,重写run()方法; * @author Administrator */ class GameThread implements Runnable {@Overridepublic void run() {/** * currentThread() 返回当前正在执行的线程的对象的引用 * isInterrupted() 测试线程是否中断 */while (!Thread.currentThread().isInterrupted()) {//发送消息Message message = new Message();message.what = REFRESH;mHandler.sendMessage(message);try {//等待一百毫秒Thread.sleep(100);} catch (InterruptedException e){Thread.currentThread().interrupt();}}} } Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {//处理消息switch (msg.what){case REFRESH://刷新游戏窗体mGameView.invalidate();break;}super.handleMessage(msg);} };}
游戏界面代码如下:
package nyl.viewdemo1; import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.View; public class GameView extends View {private int miCount = 0;int y = 0;public GameView(Context context) {super(context);} @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (miCount < 100) {miCount++;} else {miCount = 0;}Paint mPaint = new Paint();switch (miCount % 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.WHITE);break;}//绘制矩形canvas.drawRect(200, 100, 400, 300, mPaint);}}
更多相关文章
- Android界面布局基本知识简述
- Android消息处理两大利器:Handler and Looper
- Android线程模型解析(包括UI的更新)
- android中的UI单线程模型
- Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy
- android listview局部刷新和模拟应用下载
- Android的内存泄漏和调试
- Android(安卓)多线程-----AsyncTask详解
- android 结合源码深入剖析AsyncTask机制原理