Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

时间:2022-09-24 16:03:27

Android绘图机制(三)——自定义View的三种实现方式以及实战项目操作


Android绘图机制(一)——自定义View的基础属性和方法

里说过,实现自定义View有三种方式,分别是

1.对现有的控件进行扩展

2.通过组件来实现新的控件

3.重写View来实现全新的控件

所以本节就来带大家把这个流程走一遍,我们用到的项目还是

Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

本节现在就是做一个真正意义上的自定义View的操作了

注意本节的项目来自于《Android群英传》中的几个小例子

一.对现有的控件进行扩展之自定义TextView

我们新建一个Class类TextView继承TextView
package com.lgl.view.view;

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

/**
 * Created by LGL on 2016/1/10.
 */
public class TextView extends android.widget.TextView {

    private Paint paint1, paint2;

    public TextView(Context context) {
        super(context);
    }

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

    @Override
    protected void onDraw(Canvas canvas) {

        //实例化画笔
        paint1 = new Paint();
        //给画笔1设置颜色
        paint1.setColor(getResources()
                .getColor(android.R.color.holo_blue_light));
        //给画笔1设置Style
        paint1.setStyle(Paint.Style.FILL);

        //实例化画笔
        paint2 = new Paint();
        //给画笔2设置颜色
        paint2.setColor(Color.YELLOW);
        //给画笔2设置Style
        paint2.setStyle(Paint.Style.FILL);

        //绘制外层矩形
        canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint1);
        //绘制内层矩形
        canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, paint2);
        canvas.save();
        //父类完成的方法,即绘制完成
        super.onDraw(canvas);
    }
}

截图

Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

二.重写View来实现全新的控件

市面上有许许多多的APP,他们之中有很多的控件都不是原生的,而是需要我们自定义View的
package com.lgl.view.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;
import android.view.WindowManager;

/**
 * 半弧圆
 * Created by LGL on 2016/1/10.
 */
public class RCircleView extends View {

    //弧的画笔
    private Paint rpaint;
    //圆的画笔
    private Paint cpaint;
    //文字的画笔
    private Paint tvpaint;
    //屏幕高宽
    private int width, height;
    //文字
    private String text = "绘制半弧圆";

    public RCircleView(Context context) {
        super(context);
        init();
    }

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

    private void init() {
        //获取屏幕的宽高
        //Android绘图机制(一)——自定义View的基础属性和方法里面有讲
        WindowManager wm = (WindowManager) getContext()
                .getSystemService(Context.WINDOW_SERVICE);

        width = wm.getDefaultDisplay().getWidth();
        height = wm.getDefaultDisplay().getHeight();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //实例化画笔,以及设置属性,颜色,文字大小
        rpaint = new Paint();
        rpaint.setStyle(Paint.Style.STROKE);
        cpaint = new Paint();
        tvpaint = new Paint();
        tvpaint.setColor(Color.WHITE);
        tvpaint.setTextSize(20);
        //绘制弧线的区域矩形
        RectF mArcRectF = new RectF((float) (width * 0.1), (float) (width * 0.1), (float) (width * 0.9), (float) (width * 0.9));
        //绘制圆
        canvas.drawCircle(width / 2, width / 2, (float) (width * 0.5 / 3), cpaint);
        //绘制弧线
        canvas.drawArc(mArcRectF, 270, 240, false, rpaint);
        //这样绘制的话,会出现偏差的,文字以圆形的中心开始绘制
        canvas.drawText(text, width / 2, width / 2, tvpaint);
    }
}

截图

Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

这里,你会疑惑,为什么文字不是居中?我们来画个图

Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

这个还是比较基础的,下一节我们就来点新的玩法

Demo下载:本系列最后一节提供

Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件的更多相关文章

  1. Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

    Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...

  2. Android绘图机制(一)——自定义View的基础属性和方法

    Android绘图机制(一)--自定义View的基础属性和方法 自定义View看起来,确实看起来高深莫测,很多Android开发都不是特别在行这一块,这里面的逻辑以及一些绘画都是有一点难的,说一下我目 ...

  3. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...

  4. Android群英传笔记——第六章:Android绘图机制与处理技巧

    Android群英传笔记--第六章:Android绘图机制与处理技巧 一直在情调,时间都是可以自己调节的,不然世界上哪有这么多牛X的人 今天就开始读第六章了,算日子也刚好一个月了,一个月就读一半,这效 ...

  5. Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美

    Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...

  6. Android ——利用OnDraw实现自定义View(转)

    自定义View的实现方式大概可以分为三种,自绘控件.组合控件.以及继承控件.本文将介绍自绘控件的用法.自绘控件的意思是,这个控件上的内容是用onDraw函数绘制出来的.关于onDraw函数的介绍可参看 ...

  7. Android特效专辑(三)——自定义不一样的Toast

    Android特效专辑(三)--自定义不一样的Toast 大家都知道,Android的控件有时候很难满足我们的需求,所以我们需要自定义View.自定义的方式很多,有继承原生控件也有直接自定义View的 ...

  8. 【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用

    Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用 分类: Android UI ...

  9. 【转】Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用

    Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用 分类: Android UI2015-06-15 16: ...

随机推荐

  1. hdu-----(1507)Uncle Tom's Inherited Land*(二分匹配)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  2. [改善Java代码]推荐使用String直接量赋值

    建议52:推荐使用String直接量赋值 一.建议 String对象的生成方式有两种: 1.通过new关键字生成,String str3 = new String(“中国”); 2.直接声明,如:St ...

  3. JS禁用右键,禁用打印,防止另存为,IE浏览器识别(转载)

    oncontextmenu="window.event.returnValue=false" style="overflow-y: hidden; overflow-x: ...

  4. Hive-1.2.1与HBase-1.1.2的整合

    这里的整合是指,将HBase作为存储数据的库,由Hive作为连接桥梁 修改 Hive hive-site.xml 增加<property> <name>hbase.zookee ...

  5. js 一些基础的理解

    javascript(JS)的组成? DOM 文档对象模型 BOM 浏览器对象模型 ECMAScript javascript(JS)在页面中处理了什么事情? 特效交互 数据交互 逻辑操作 常见特效的 ...

  6. swoole框架和其所涉及的协议

    网络知识基础 OSI协议 :应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 tcp通信 TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道(三次握手.四次挥手). ...

  7. 密码与安全新技术专题之AI与密码

    20189217 2018-2019-2 <密码与安全新技术专题>第五周作业 课程:<密码与安全新技术专题> 班级: 1892 姓名: 李熹桥 学号:20189214 上课教师 ...

  8. Hadoop 管理工具HUE配置-hdfs&lowbar;clusters配置

    在HUE的hdfs_clusters中目前主要是配置hdfs相关的,配置好了之后便可以在hue中愉快的管理数据了,不过目前的配置还是比较...简单的..    里面的配置主要是参考了hue官方文档,还 ...

  9. java项目日志写到logstash-TCP&sol;UDP

    好处:项目日志写到logstash,然后发送到ElasticSearch,可以方便查看搜索日志,还可以做报表分析. logstash是一个数据采集工具,有多种渠道,比如文件,tcp,udp等,如果是采 ...

  10. python程序里加入调试断点

    在需要打断的地方加入:import pdb;pdb.set_trace()即可 如: