步步为营_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

时间: 2024-10-26 02:11:26

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

步步为营_Android开发课[19]_用户界面之ListView(列表视图)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之ListView(列表视图) -ListView和TextView,Button等控件一样,一样的定义方式和显示方式,所以不再重复学了.但是Android开发中ListView经常适配一些适配器来显示,所以我们要学重点是是ListView的各种适配. List

步步为营_Android开发课[14]_用户界面之Layout(布局)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之Layout(布局) -在Android开发中我们有传说中的5大布局,它们的结合使用,画出了APP界面的条条框框. Android中常用的5大布局: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件

步步为营_Android开发课[30]_用户界面之ViewFlipper

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之ViewFlipper - ViewFlipper多视图切换(实例) 实现效果: 左右滑动,模拟欢迎界面的图片切换. activity_main.xml: <?xml version="1.0" encoding="utf-8&quo

步步为营_Android开发课[21]_用户界面之Notification(通知栏)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 本文资源借助于网友:幻影浪子 - 主题:用户界面之Notification(通知栏) - Notification实例(含系统自带Notification+半自定义Notification+自定义Notification) activity_main.xml: <?xml v

步步为营_Android开发课[20]_用户界面之Menu(菜单)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之Menu(菜单) - item元素的属性说明如下: - id:唯一标示菜单的ID引用. - menuCategory:菜单分类. - orderInCategory:分类排序. - title:菜单标题字符串. - titleCondensed:浓缩标题,适合

步步为营_Android开发课[17]_用户界面之Button(按钮)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之Button(按钮) Button和ImageButton控件实例: activity_main.xml源代码: <?xml version="1.0" encoding="utf-8"?> <LinearLay

步步为营_Android开发课[37]_用户界面之theme和style

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之theme和style -theme和style很容易混淆,theme样式是用于添加到application或者activity中去的.而style样式是用于添加到view控件中去的. 样式的定义: 找到项目文件夹:res/valus/styles,style

步步为营_Android开发课[32]_用户界面之Toast(吐司)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之Toast(吐司) -常用于APP中的一些小提示 Toast的结构分析: Toast toast=Toast.makeText(MainActivity.this, "默认的Toast", Toast.LENGTH_SHORT).show(); 第一

步步为营_Android开发课[31]_用户界面之Splash(闪屏启动)

Focus on technology, enjoy life!-- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/details/44624305 主题:用户界面之Splash(闪屏启动) - 用Splash做闪屏启动界面(实例): 实现效果: APP启动全屏显示一张背景图片,2s后跳转到MainActivity. AndroidManifest.xml: (在AndroidManifest中使用android:them