Android -- 自定义View小Demo,关于Rect绘制Android机器人(一)

1,关于Rect和RectF类的区别以前一直没有去关注它,刚刚了解了一下才知道都是用来确定矩形的区域,不过Rect是int类型的坐标而RectF是float类型的坐标,所以说RectF要更加精确。现在是要使用paint画出一个机器人的图片,如下图机器人的图片:

2,  看一下我们做出来的效果

再看看代码,基本上都是使用的RectF这个类来操作

package com.wangjitao.myview.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by wangjitao on 2016/10/10 0010.
 * 主要是对矩形的使用
 */
public class MyRectFView extends View {
    public MyRectFView(Context context) {
        super(context);
    }

    public MyRectFView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyRectFView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(0xFFA4C739);

        //绘制机器人的头部(一个半圆弧)
        RectF rectF_head = new RectF(10, 10, 100, 100);
        //设置偏移量
        rectF_head.offset(100, 20);
        //绘制曲线,且去掉最中间的圆心
        canvas.drawArc(rectF_head, -10, -160, false, paint);

        //绘制眼睛(眼睛是两个白色的小圆)
        paint.setColor(Color.WHITE);
        canvas.drawCircle(135, 53, 4, paint);
        canvas.drawCircle(175, 53, 4, paint);

        //绘制两根天线(就是两个直线)
        paint.setColor(0xFFA4C739);
        paint.setStrokeWidth(2);
        canvas.drawLine(120, 15, 135, 35, paint);
        canvas.drawLine(190, 15, 175, 35, paint);

        //绘制身体(一个简单的圆角矩形,使用的是两个矩形,第一个矩形是正常的矩形,第二个矩形是待圆角的矩形)
        canvas.drawRect(110, 75, 200, 150, paint);    //绘制矩形
        RectF rectf_body = new RectF(110, 140, 200, 160);
        canvas.drawRoundRect(rectf_body, 10, 10, paint);    //绘制圆角矩形

        //绘制胳膊(带圆弧的矩形)
        RectF rectf_arm = new RectF(85, 75, 105, 140);
        canvas.drawRoundRect(rectf_arm, 10, 10, paint);    //绘制左侧的胳膊
        rectf_arm.offset(120, 0);                            //设置在X轴上偏移120像素
        canvas.drawRoundRect(rectf_arm, 10, 10, paint);    //绘制右侧的胳膊

        //绘制两条腿(也是两个带矩形的矩形)
        RectF rectf_leg = new RectF(125, 150, 145, 200);
        canvas.drawRoundRect(rectf_leg, 10, 10, paint);    //绘制左侧的腿
        rectf_leg.offset(40, 0);                            //设置在X轴上偏移40像素
        canvas.drawRoundRect(rectf_leg, 10, 10, paint);    //绘制右侧的腿
    }
}

  

时间: 2024-12-27 19:59:20

Android -- 自定义View小Demo,关于Rect绘制Android机器人(一)的相关文章

Android -- 自定义View小Demo,关于Path类的使用(一)

1,在我们知道自定义view中onDraw()方法是用于绘制图形的,而Path类则是其中的一个重要的类,如下图效果: 代码也没有什么难度,直接贴出来吧 @Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.WHITE); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(0xFFFF6600); paint.setText

【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发逻辑及经常遇到的一些“诡异”现象

前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五)Android事件分发机制(上)Touch三个重要方法的处理逻辑][下文简称(五),请先阅读完(五)再阅读本文],我们通过示例和log来分析了Android的事件分发机制.这些,我们只是看到了现象,如果要进一步了解事件分发机制,这是不够的,我们还需要透过现象看本质,去研究研究源码.本文将从源码(基

【朝花夕拾】Android自定义View篇之(五)Android事件分发及传递机制

前言 在自定义View中,经常需要处理Android事件分发的问题,尤其在有多个输入设备(如遥控.鼠标.游戏手柄等)时,事件处理问题尤为突出.Android事件分发机制,一直以来都是一个让众多开发者困扰的难点,至少笔者在工作的前几年中,没有特意研究它之前,就经常云里雾里.实际上,该问题的“七寸”就是dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent ev).onTouchEvent(MotionEvent ev

【朝花夕拾】Android自定义View篇之(八)多点触控(上)基础知识

前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/11155259.html],谢谢! 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2.0开始引入的,在现在使用的Android手机上都是支持多点触控的.本系列文章将对常见的多点触控相关的重点知识进行总结,并使用多点触控来实现一些常见的效果,从而达到将

android自定义View之NotePad出鞘记

现在我们的手机上基本都会有一个记事本,用起来倒也还算方便,记事本这种东东,如果我想要自己实现,该怎么做呢?今天我们就通过自定义View的方式来自定义一个记事本.OK,废话不多说,先来看看效果图. 整个页面还是很简单的. 1.自定义View的分类 OK,那么在正文开始之前,我想先来说说自定义View的分类,自定义View我们一共分为三类 1.自绘控件 自绘控件就是我们自定义View继承自已有控件,然后扩展其功能,之前两篇自定义View的博客(android自定义View之钟表诞生记,android

Android自定义View【实战教程】5??---Canvas详解及代码绘制安卓机器人

友情链接: Canvas API Android自定义View[实战教程]3??--Paint类.Path类以及PathEffect类详解 神马是Canvas 基本概念 Canvas:可以理解为是一个为我们提供了各种工具的画布,我们可以在上面尽情的绘制(旋转,平移,缩放等等).可以理解为系统分配给我们一个一个内存空间,然后提供了一些对这个内存空间操作的方法(API), 实际存储是在下面的bitmap. 两种画布 这里canvas可以绘制两种类型的画图,分别是view和surfaceView. V

Android自定义view之绘制实用型的柱形图和折线图

概述: 前几天突然需要做两种图表--柱形图.折线图,于是第一反应是先看看网上有没有现成的,结果有是有,但都不是我想要的,而且大多数不是用纯android代码完成,HTML5似乎完成这类工作要容易得多,但是我本人并不会HTML5,只能黯然神伤,掩面流泪,最终只能自己敲代码了. **知识点:**android自定义view.图形图像.Fragment.MVC模式. Demo 界面是模仿红圈营销搭建的 折线图: 代码,注释很详细,直接看代码就行了: public class LineChartView

Android自定义View绘制闹钟

Android自定义View绘制闹钟 本文简单实现了一个闹钟,扩展View,Canvas绘制 效果如下: 代码如下: package com.gaofeng.mobile.clock_demo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.gr

android 自定义View【2】对话框取色&色盘取色的实现

android 自定义View[2]对话框取色&色盘取色的实现    上一篇文章基本介绍了android自定义view的流程:继承view,复写view的一些方法.实现简单的自定义view.这篇文章主要介绍的是系统对话框取色功能,然后顺便介绍升级版,色盘取色[类似于ps中的吸管,对图片点击相应位置,获取那个位置的颜色]. 一.概述:通过该例子了解以下内容: 1.进一步了解android 自定义view. 2.知道如何获取图片上的颜色值. 3.监听屏幕touch,实现移动的时候自动取色.[onDr