步步为营_Android开发课[13]_用户界面之view(视图)

Focus on technology, enjoy life!—— QQ:804212028
浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305


  • 主题:用户界面之view(视图)
    -View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要。在Android中,任何一个View类都只需重写onDraw方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等。

View使用实例
让我们来自定义一个GameView视图(用来显示游戏界面),一切自定义视图都来自View,所以它必须继承父类View。

GameView.java的源代码:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
//想要自定义GameView视图必须先继承父类View
public class GameView extends View {

    int miCount = 0;

    public GameView(Context context) {
        super(context);
    }
    // onDraw是画笔方法,Canvas是画布。画布就相当于画纸。用画笔在画布上画画。
    public void onDraw(Canvas 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.YELLOW);
            break;
        default:
            mPaint.setColor(Color.WHITE);
            break;
        }
        // 在画布上绘制矩形,里面的参数是用来定义显示位置的(也就是坐标)
        canvas.drawRect((320 - 80) / 2, 0, (320 - 80) / 2 + 80, 40, mPaint);
    }
}

MainActivity.java源代码:

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.MotionEvent;
public class MainActivity extends Activity {

    private GameView mGameView = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 实例化GameView对象 
        this.mGameView = new GameView(this);
        // 设置显示为我们自定义的View(GameView)
        setContentView(mGameView);
        // 开启线程
        new Thread(new GameThread()).start();
    }

    Handler myHandler = new Handler() {
        // 接收到消息后处理
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 1:
                // 注意这里的刷新界面实际上是在UI线程中执行的 不是另外开启一个线程,这里要搞清楚
                //invalidate()是用来刷新View的,必须是在UI线程中进行工作
                mGameView.invalidate();
                break;
            }
            super.handleMessage(msg);
        }
    };

    class GameThread implements Runnable {
        public void run() {
            while (!Thread.currentThread().isInterrupted()) {
                Message message = new Message();
                message.what = 1;
                // 发送消息
                myHandler.sendMessage(message);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        }
    }
}

运行结果:
这里写图片描述

矩形颜色会不断的刷新变化,模拟了刷新游戏界面的效果。

Focus on technology, enjoy life!—— QQ:804212028
浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值