zoukankan      html  css  js  c++  java
  • 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);    //绘制右侧的腿
        }
    }
    

      

  • 相关阅读:
    activity学习参考
    Activity工作流入门
    Mysql 命令查看函数,触发器。。
    本地redis下载并启动
    Could not initialize class com.taobao.diamond.client.impl.DiamondEnvRepo
    mysql把表(表已有数据)的某列属性由空到非空,以及常用列操作
    easyexcel导出两种方式response返回文件流下载和保存到服务器返回下载链接
    EasyExcel导出带下拉框,并解决导出之后打开总是显示发现不可读取内容
    el-table的fixed固定列属性导致数据错位
    el-input按回车时,解决同时触发回车和失焦事件的问题
  • 原文地址:https://www.cnblogs.com/wjtaigwh/p/5946472.html
Copyright © 2011-2022 走看看