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

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

一、绘制三角形

在上一篇文章中,我们已经新建了虚拟方向键的自定义控件DirectionKeys类,下面我们继续。

本项目中的虚拟方向键的背景是4个三角形组成的矩形,其实是4个三角形的按钮。

系统自带的按钮是矩形的,怎么做一个三角形按钮呢?

首先我需要了解,所有控件的外观都是画出来的,当然不是我们手工去画而是用程序去画。

用程序怎么画呢?

很多技术平台上都有绘图功能,用起来也很相似。既然都是面向对象的思想,我们可以与现实中画画类比。

首先我们需要一块画布(canvas),然后需要一支画笔(paint)和颜料(color),现实中这就可以画了。然而现在是要程序去画,必须要告诉程序你要画什么。由于每个人画的东西不一样,五花八门,所以画不同的东西,告诉程序的方式也可能不同。我们画三角形选择用path对象告诉程序,下面细讲。然后程序就给你画出来了。

了解了绘图的基本流程,下面我们用代码来实现。

在android.view.View中有个方法叫onDraw的方法,我们只要重写(Override)该父类方法,在该方法中画我们想要的东西即可。

在Android Studio中输入onDraw时根据智能提示生成了如下代码:

    /**
     * 通过重写父类的onDraw方法来绘制我们需要的图形
     *
     * @param canvas 这里的canvas是系统提供的一块矩形画布,我们要做的就是在这块画布上画我们想要的东西。
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

从上面的代码中可以看到,onDraw方法给我们传来了一个叫canvas的对象,canvas就是一个画布,我们可以在上面画画。自动生成的“super.onDraw(canvas);”是调用了父类中的onDraw方法,我们可以点进去看看。

    /**
     * Implement this to do your drawing.
     *
     * @param canvas the canvas on which the background will be drawn
     */
    protected void onDraw(Canvas canvas) {
    }

发现父类中的onDraw方法是空的,可以不调用。

现在有画布了,我们还需要画笔。这好办,new一个就行了。

        //准备画笔
        Paint paint = new Paint();

画笔要蘸什么颜色的颜料呢?比如红色吧。

        //设置画笔的颜色
        paint.setColor(Color.RED);

这里的颜色是一个int类型的整数,是一个ARGB值。系统提供了几种常用颜色做为常量,比如Color.RED=0xFFFF0000,你也可以按照自己的喜好设置一种颜色。

下面我们以画左边的三角形为例。

画布上的每一个像素都有它的坐标,坐标系原点是画布的左上角。要画三角形就需要知道三个顶点的坐标。

设画布宽为width,高为height;

则画布4个顶点和中心点的坐标分别是:

左上点 0,0
        左下点 0,height
        右上点 width,0
        右下点 width,height
        中心点 width/2,height/2

那么左边三角形的三个顶点坐标分别是(0,0)(width/2,height/2)(0,height)

下面该path对象出场了。path的意思是路径,它能告诉程序沿着设计好的路径画图。我们知道三角形是由三段直线段组成的,程序中也是这么设计的:

        //画布的宽
        int width = canvas.getWidth();
        //画布的高
        int height = canvas.getHeight();

        //画左方向键背景三角形的路径
        Path pathLeft = new Path();
        //从画布左上点开始
        pathLeft.moveTo(0, 0);
        //画直线到画布中心点
        pathLeft.lineTo(width / 2, height / 2);
        //再画直线到画布左下点
        pathLeft.lineTo(0, height);
        //自动闭合图形。从最后一个点(左下点)画直线到第一个点(左上点)。
        pathLeft.close();

到目前为止DirectionKeys类的所有代码如下:

package net.chengyujia.happysnake;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
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);
    }

    /**
     * 通过重写父类的onDraw方法来绘制我们需要的图形
     *
     * @param canvas 这里的canvas是系统提供的一块矩形画布,我们要做的就是在这块画布上画我们想要的东西。
     */
    @Override
    protected void onDraw(Canvas canvas) {
        //画布的宽
        int width = canvas.getWidth();
        //画布的高
        int height = canvas.getHeight();
        /*
        (小提示:在计算机中一般都是将左上角作为坐标原点的)
        画布上四个顶点和中心点的坐标如下:
        左上点 0,0
        左下点 0,height
        右上点 width,0
        右下点 width,height
        中心点 width/2,height/2
        */

        //画左方向键背景三角形的路径
        Path pathLeft = new Path();
        //从画布左上点开始
        pathLeft.moveTo(0, 0);
        //画直线到画布中心点
        pathLeft.lineTo(width / 2, height / 2);
        //再画直线到画布左下点
        pathLeft.lineTo(0, height);
        //自动闭合图形。从最后一个点(左下点)画直线到第一个点(左上点)。
        pathLeft.close();

        //准备画笔
        Paint paint = new Paint();
        //设置画笔的颜色
        paint.setColor(Color.RED);
        //设置画笔为实心(默认就是实心,这里不设置也行)
        paint.setStyle(Paint.Style.FILL);
        //按照刚才的路径设计画了一个实心的红色三角形
        canvas.drawPath(pathLeft, paint);
    }
}

二、测试

现在我们就能用一下我们自定义的控件了,和用系统自带的控件一样,只不过在XML布局文件中需要用类的全名做标签,不然会报错。

我们将MainActivity的布局文件修改如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="net.chengyujia.happysnake.MainActivity">

    <!--自定义控件一定要用类的全名,不然会报错。-->
    <net.chengyujia.happysnake.DirectionKeys
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

然后运行一下,截图如下:

好了,本篇到此结束,下篇继续。

如果遇到问题可以在下面的评论中交流。^_^

时间: 2024-10-21 02:51:44

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

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

该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.知识点讲解 当我们点击系统自带的按钮时,按钮的外观会发生变化.上篇博文中我们画了一个三角形按钮,但点击还不能变色,下面我们就来实现点击变色功能. 从知识体系上我们需要了解以下两个知识点 1.如何知道手指点击了我们的控件? 办法是重写View中的onTouchEvent方法.当手指触摸到我们的控件时,系统会通过该方法告诉我们.该方法还有一个类型为MotionEvent的参数,

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

本系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html本系列教程项目源码GitHub地址:https://github.com/jackchengyujia/HappySnake 一.本文概述 在上篇教程中,我们画了4个背景三角形,并且实现了点击变色的按钮效果.在本篇教程中,我们将在这4个三角形上分别绘制表示方向的箭头,并且让箭头也有点击变色的效果.我们先看一下运行效果,有一个直观的了解,然后再从代码的角度分析和讲解. 二.运行效果

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

一.项目简介贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏.我已经将做好的案例上传到了应用宝,大家可以下载下来把玩一下.为了和其它的贪吃蛇区别开来,我取名叫“快乐贪吃蛇”.应用宝链接:http://sj.qq.com/myapp/detail.htm?apkName=net.chengyujia.happysnake这里上两张截图先睹为快,哈哈.怎么玩大家应该都知道,不过我还是要多提一下.通过屏幕上的方向键控制蛇的前进方向.蛇每吃到一个食物身体会

结对-贪吃蛇游戏-结对项目总结

结对-贪吃蛇游戏-结对项目总结 1.编写目的 贪吃蛇游戏是一款内存小易操作的益智类小游戏,特别适合我们在压力大时作为一个缓解情绪的娱乐方式,既不沉迷又得到放松,随时随地都可以玩不需要网络. 2.设计思路 游戏通过控制贪吃蛇的移动方向决定它吃下去的东西来增加它的长度,使它逐渐变长,每吃下去一个随之增长一个长度,当贪吃蛇碰到墙壁或者自己本身则游戏结束. 3.游戏功能 通过UP上,DOWN下,life左,right右控制贪吃蛇的移动方向,每吃一个东西增加一个长度,碰到墙壁或自身则游戏结束 4.代码 下

结对-开发贪吃蛇游戏-开发环境搭建过程

项目:贪吃蛇游戏开发 环境搭建: Mac下: 1)官网下载jkd1.8版本. 2)下载IDE--eclipse或Myeclipse win下: 1)官网下载JDK,找到符合自己电脑的版本,下载的本地 2)下载IDE--eclipse或Myeclipse 3)配置环境变量: i.计算机->属性->高级系统设置 ii.单击高级系统设置->环境变量在系统变量里面分别设置JAVA_HOME.CLASSPATH和Path iii.在系统变量里找变量名JAVA_HOME,如果没有就点击新建.输入变量

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

今天来介绍博主最近捣腾的一个小游戏[贪吃蛇],贪吃蛇这个游戏相信大家都不会感到陌生吧.今天博主将通过Love2D这款游戏引擎来为大家实现一个简单的贪吃蛇游戏,在本篇文章当中我们将会涉及到贪吃蛇的基本算法.Lua语言编程等基本的内容,希望能够对大家开发类似的游戏提供借鉴和思考,文章中如有不足之处,还希望大家能够谅解,因为博主的游戏开发基本就是这样慢慢摸索着学习,所以难免会有不足的地方. 游戏算法 我们首先来看看贪吃蛇是怎么移动的? 通过这四张图的演示,我们可以发现这样一个规律: 蛇的移动其实是将蛇

用Java开发贪吃蛇游戏

贪吃蛇游戏的设计步骤: Part 1: 设计游戏图纸 画出900*700的白色窗口 在窗口上添加画布 在画布上添加标题 在画布上添加黑色游戏区 Part 2: 放置静态的蛇:一个头.两个身体 加上开始提示:按空格键开始游戏 让蛇动起来:监听Timer事件,平移数据 实现游戏暂停 实现转向功能 Part 3: 添加食物 吃掉食物 添加死亡条件 实现“重新开始”功能 添加分数和长度 游戏图纸如下: 蛇及游戏框的素材如下:                              Snake主类: 1

Java 开发简单的贪吃蛇游戏

public class Test { public static void main(String[] args) { Game game = new Game(); game.start(); } } public class Node { private int x ; private int y ; public Node(){} public Node(int x , int y){ this.x = x ; this.y = y ; } public int getX() { ret

基于控制台实现贪吃蛇游戏

1).引言 学习编程,我个人觉得最好的办法就是根据自己的水平不断的给自己设定一个小目标.而这个小目标就是一个有意思的项目,通过完成这个项目,对自己的成果(也包括失败的)进行分析总结,从中提炼出对应的技术并分享出来,不断的往复,如此,为的就是让我们永远保持编写程序的兴趣和热情,完了,还提高我们的技术.而本文就是总结自己的一个小目标(基于控制台实现的贪吃蛇游戏而写的总结) 2).技术实现 大家小时候一定玩过贪吃蛇的游戏.贪吃蛇游戏的控制过程其实也不复杂.简单的可以概括为以下4个部分. 1.1  .组