该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html

一、自定义控件简介

在本项目中,无论是游戏主区域还是虚拟方向键都是通过自定义控件来实现的,我们有必要先对自定义控件有个简单的了解。而且通过自定义控件的学习能更好的理解系统自带控件的内部机制。

  • 什么是自定义控件呢?

我们平时用的控件(比如Button、TextView等)是Android系统自带的控件,我们可以拿来直接用。但当自带的控件不够用或不能满足我们的需求时,就需要我们自己做控件了。我们自己做的控件就叫自定义控件。

  • 怎样自定义控件呢?

Android自带的控件都是直接或间接的继承自android.view.View这个类

在Android Studio中,鼠标点击某个类,然后按快捷键Ctrl+H,就可以看到这个类的继承关系。

下面这张截图以Button为例:

通过这张图我们可以看到Button继承自TextView,TextView又继承自View,同时Button下面还有多个子类,它们都是View的子类。

Android自带的控件都继承自View或View的子类,而我们自定义的控件也是如此。

二、创建虚拟方向键的自定义控件

在以前的手机上一般都有物理方向键,而现在几乎都没了。但留给了我们更大的屏幕空间,让我们来自由发挥。我们首先需要通过自定义控件来做一个虚拟的方向键。

下面我们就来动手做!

首先我们新建一个工程,工程名叫HappySnake。

然后新建一个类,类名叫DirectionKeys,然后让该类继承自View。

但此时报错了:

原因是虽然View中有个没有参数的默认构造方法,但这个构造方法是谷歌开发人员内部测试用的,只有包内的访问权限,不对外提供。如下:

    /**
* Non-public constructor for use in testing
*/
View() {
mResources = null;
mRenderNode = RenderNode.create(getClass().getName(), this);
}

所以我们的自定义控件必须在自己的构造方法中调用一个View中的Public构造方法。这里我们的构造方法中的参数也需要和View中的匹配,因为这些参数是系统框需要的。

将光标移到标错的红线上,按快捷键Alt+Enter可以看到修复错误的提示:

按照上图的提示我们选择第一项,创建匹配父类的构造方法:

从上图可以看到View中有4个构造方法,其中第4个也就是有4个参数的构造方法是从Android5.0开始有的。

常用的是第一个和第二个构造方法,其中第一个是我们在代码中通过new关键字创建该控件实例时用,而第二个是系统在XML布局文件中创建实例时调用。
在本项目中只用到了第二个构造方法,但一般把前两个都写上吧,万一用到呢。写也不复杂,只要按住Ctrl,选中需要的,点“OK”就可以了。

package net.chengyujia.happysnake;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View; /**
* 屏幕上的虚拟方向键
* Created by ChengYuJia on 2016/8/19.
*/
public class DirectionKeys extends View {
//只有一个参数的构造方法是我们在程序中通过“new”关键字创建实例时调用。
public DirectionKeys(Context context) {
super(context);
} //有两个参数的构造方法是系统在XML布局文件中创建实例时调用。
public DirectionKeys(Context context, AttributeSet attrs) {
super(context, attrs);
}
}

如果不做自定义属性的话,不需要对构造方法做任何修改,这就可以了。

到目前为止这个自定义的控件还没有实质性内容,文章长了编辑起来不太方便,我们下篇继续~~~

Android快乐贪吃蛇游戏实战项目开发教程-02虚拟方向键(一)自定义控件概述的更多相关文章

  1. Android快乐贪吃蛇游戏实战项目开发教程-03虚拟方向键(二)绘制一个三角形

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.绘制三角形 在上一篇文章中,我们已经新建了虚拟方向键的自定义控件Direct ...

  2. Android快乐贪吃蛇游戏实战项目开发教程-06虚拟方向键(五)绘制方向键箭头

    本系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html本系列教程项目源码GitHub地址:https://github.com/jack ...

  3. Android快乐贪吃蛇游戏实战项目开发教程-05虚拟方向键(四)四个三角形按钮

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.如何判断点击的是哪个方向键按钮 在上篇教程中我们实现了左边的三角形按钮效果, ...

  4. Android快乐贪吃蛇游戏实战项目开发教程-04虚拟方向键(三)三角形按钮效果

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.知识点讲解 当我们点击系统自带的按钮时,按钮的外观会发生变化.上篇博文中我们 ...

  5. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  6. 原生Js贪吃蛇游戏实战开发笔记

    前言 本课程是通过JavaScript结合WebAPI DOM实现的一版网页游戏---贪吃蛇的开发全过程,采用面向以象的思想设计开发.通过这个小游戏的开发, 不仅可以掌握JS的语法的应用,还可以学会D ...

  7. Android实现贪吃蛇游戏

    [绥江一百]http://www.sj100.net                                                  欢迎,进入绥江一百感谢点击[我的小网站,请大家多 ...

  8. 【C语言项目】贪吃蛇游戏(上)

    目录 00. 目录 01. 开发背景 02. 功能介绍 03. 欢迎界面设计 3.1 常用终端控制函数 3.2 设置文本颜色函数 3.3 设置光标位置函数 3.4 绘制字符画(蛇) 3.5 欢迎界面函 ...

  9. 使用Love2D引擎开发贪吃蛇游戏

    今天来介绍博主近期捣腾的一个小游戏[贪吃蛇],贪吃蛇这个游戏相信大家都不会感到陌生吧.今天博主将通过Love2D这款游戏引擎来为大家实现一个简单的贪吃蛇游戏,在本篇文章其中我们将会涉及到贪吃蛇的基本算 ...

随机推荐

  1. 2.Kali安装VMware tools(详细+异常处理)

    dnt@MT:~$ cd /media/cdrom0 进入光驱内 dnt@MT:/media/cdrom0$ ls 查看当前目录下有哪些内容manifest.txt run_upgrader.sh V ...

  2. .Net开源工作流Roadflow的使用与集成

    序言 最近公司要整理公司内部oa系统,需要使用到工作流,所以就开始了开源工作流挑选,使用,到集成到公司内部系统的工作. 首先在网上搜了文档,自己也有补充,整理啦国内几款工作流的比较,由于没有个个击破式 ...

  3. Logstash时区、时间转换,message重组

    适用场景 获取日志本身时间 日志时间转Unix时间 重组message 示例日志: hellow@,@world@,@2011-11-01 18:46:43 logstash 配置文件: input{ ...

  4. LOCK TABLES和UNLOCK TABLES与Transactions的交互

    LOCK TABLES对事务不安全,并且在试图锁定表之前隐式提交任何活动事务. UNLOCK TABLES只有在LOCK TABLES已经获取到表锁时,会隐式提交任何活动事务.对于下面的一组语句,UN ...

  5. JavaScript 中对变量和函数声明的“提前”

    变量声明“被提前” JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对“先声明.后使用”的规则很熟悉,如果使用未经声明的变量或 ...

  6. .NET Core采用的全新配置系统[4]: “Options模式”下各种类型的Options对象是如何绑定的?

    旨在生成Options对象的配置绑定实现在IConfiguration接口的扩展方法Bind上.配置绑定的目标类型可以是一个简单的基元类型,也可以是一个自定义数据类型,还可以是一个数组.集合或者字典类 ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. 【十大经典数据挖掘算法】EM

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...

  9. C#开发微信门户及应用(13)-使用地理位置扩展相关应用

    本文继续上一篇<C#开发微信门户及应用(12)-使用语音处理>,继续介绍微信的相关应用.我们知道,地理位置信息可以用来做很多相关的应用,除了我们可以知道用户所在的位置,还可以关联出一些地理 ...

  10. C#开发微信门户及应用(6)--微信门户菜单的管理操作

    前面几篇继续了我自己对于C#开发微信门户及应用的技术探索和相关的经验总结,继续探索微信API并分享相关的技术,一方面是为了和大家对这方面进行互动沟通,另一方面也是专心做好微信应用的底层技术开发,把基础 ...