代码地址如下:
http://www.demodashi.com/demo/14712.html

前言

在讲述自定义控件的时候,我们讲到了自定义控件的基本步骤,那么在自定义控件中,我们第一个需要了解的就是Paint,即画笔。那么今天就来讲讲paint的基本使用。

自定义控件概述

今天要讲的内容包括:

  1. Paint画笔的基本使用
  2. Paint设置宽度时需要注意的地方
  3. 利用paint开发的一个简单示例
  4. 项目结构图和效果图
一.Paint画笔的基本使用
1.1 创建画笔,即Paint对象
        //初始化Paint
Paint paint=new Paint();
1.2 设置Paint颜色

在设置Paint颜色之前,我们需要了解下颜色的一些基本知识

色值的定义有两种方式:

1.十进制方式

2.十六进制表示法

十进制的话颜色色值是从 0-255,数字越大,颜色越深,数字越小,颜色越浅;

十六进制表示法是:(00-ff)(00-ff)(00-ff)(00-ff)分别代表ARGB(例如表示白色,我们可以这样:#ffffffff),数值越小越淡,越大越深。

A表示透明度

R表示红色色值

G表示绿色色值

B表示蓝色色值

每种颜色都由ARGB组成,例如透明为:#00000000,红色为:#FFFF0000,绿色为:#FF00FF00,蓝色为:#FF0000FF

那么接下来就是给Paint设置颜色,代码如下:

        //设置画笔颜色
paint.setColor(0xffff0000);
1.3 设置Paint填充样式

Paint的填充样式分三种:

        //Paint.Style.FILL:仅填充内部
//Paint.Style.STROKE:仅描边
//Paint.Style.FILL_AND_STROKE:描边且填充内部

如果想设置Paint的填充样式为仅描边,你可以这样:

        //设置画笔样式
paint.setStyle(Paint.Style.STROKE);
1.4 设置Paint宽度

我们可以用以下方法来给Paint设置宽度(设置Piant宽度为30f):

        //设置画笔宽度
paint.setStrokeWidth(30f);
1.5 Paint使用步骤基本代码

下面以创建一个MyView代码为例,贴出Paint使用步骤的基本代码

public class MyView extends View{

    public MyView(Context context) {
super(context);
} public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
} public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); //初始化Paint
Paint paint=new Paint();
//设置画笔颜色
paint.setColor(0xffff0000);
//设置画笔样式
paint.setStyle(Paint.Style.STROKE);
//设置画笔宽度
paint.setStrokeWidth(10f);
//将paint设置到canvas中去
canvas.drawCircle(200,200,100,paint);
}
}
二.Paint设置宽度时需要注意的地方

paint.setStrokeWidth();方法仅对Paint的样式为Paint.Style.STROKE或Paint.Style.FILL_AND_STROKE起作用,当Paint的样式为Paint.Style.FILL时,设置Paint的宽度不起作用,因为Paint设置的宽度是描边宽度,而Paint.Style.FILL是仅填充内部,没有描边。

三.利用paint开发的一个简单示例

这里我们自定义一个PaintView,实现的是一个类似同心圆的效果,具体代码在demo中有,这里主要讲解其在MainActivity对应的activity_main.xml中的引用,xml中引用代码如下:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context="com.android.testdemo.main.MainActivity"> <com.android.testdemo.animation.PaintView
android:layout_width="match_parent"
android:layout_height="match_parent"/> </android.support.constraint.ConstraintLayout>
四.项目结构图和效果图

项目结构图

效果图

Paint的基本使用

代码地址如下:
http://www.demodashi.com/demo/14712.html

Paint的基本使用的更多相关文章

  1. 详解Paint的setXfermode(Xfermode xfermode)

    一.setXfermode(Xfermode xfermode) Xfermode国外有大神称之为过渡模式,这种翻译比较贴切但恐怕不易理解,大家也可以直接称之为图像混合模式,因为所谓的“过渡”其实就是 ...

  2. android Canvas 和 Paint用法

    自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...

  3. [LeetCode] Paint Fence 粉刷篱笆

    There is a fence with n posts, each post can be painted with one of the k colors. You have to paint ...

  4. [LeetCode] Paint House II 粉刷房子之二

    There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...

  5. [LeetCode] Paint House 粉刷房子

    There are a row of n houses, each house can be painted with one of the three colors: red, blue or gr ...

  6. xp系统重绘边框线不显示(首次加载没有触发paint事件)

    同样是,重绘边框事件,win7系统显示正常,而xp系统却不显示,这是什么原因造成的呢? 于是,小编开始百度,不停的查找原因,通过一番查找,小编也意外的收获了一些内容: 例如:窗口的拖动,放大,缩小,等 ...

  7. LeetCode Paint House II

    原题链接在这里:https://leetcode.com/problems/paint-house-ii/ 题目: There are a row of n houses, each house ca ...

  8. LeetCode Paint House

    原题链接在这里:https://leetcode.com/problems/paint-house/ 题目: There are a row of n houses, each house can b ...

  9. zjuoj 3773 Paint the Grid

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3773 Paint the Grid Time Limit: 2 Secon ...

  10. zjuoj 3780 Paint the Grid Again

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Paint the Grid Again Time Limit: 2 ...

随机推荐

  1. hdu 3660 Alice and Bob's Trip(树形DP)

    Alice and Bob's Trip Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  2. MSSQL 数据库语句原来是区分大小写的啊

    一直以来我们都认为数据库语句是不区分大小写,其实这是错误的认识,之所以不区分是因为数据库语言不区分大小写.这里我们以mssql2005中自带的AdventureWorksDW数据库为例. 执行以下语句 ...

  3. centos 下 mysql+keepalived实现双主自由切换

    目录 ip规划 mysql双主配置 keepalived配置 mysql1中keepalived的配置 mysql2中keepalived的配置 VIP漂移检测 本文的目的是搭建一个互为主从的mysq ...

  4. Cookie常用的优化方式

    我们知道,对于每一个http请求,无论是动态的网页aspx,还是jsp,还是/user/add这种MVC模式的URL,还是CSS或者JS文件,每一个http请求都会带着在硬盘上存有的跟这个域相关存有的 ...

  5. Web安全学习规划

    一名合格的Web安全工程师是要具备很多的知识点,不但要对网站架构熟悉,通讯协议,测试流程与测试工具使用,漏洞利用脚本编写,还有需要经验的积累等. 互联网进入下半场,竞争越发的激烈,能与人工智能比肩的热 ...

  6. Windows远程桌面连接的利器-mRemote

    mRemoteNG是Windows平台下一款开源的支持多标签.多协议的远程连接管理器.平时我们可能安装N多款管理工具,如putty.SecureCRT.xshell.SSHshell.mstsc.ex ...

  7. maven多module项目中千万不要引入其它模块的单元測试代码

    本文出处:http://blog.csdn.net/chaijunkun/article/details/35796335,转载请注明. 因为本人不定期会整理相关博文,会对对应内容作出完好. 因此强烈 ...

  8. js递归遍历key

    需求:根据Json对象,查找到某key所有值 var obj = { first: "1", second: { name: "abc", mykey: &qu ...

  9. 【转】Java抽象类与接口的区别

    很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...

  10. iOS debug release

    去掉日志 #ifndef __OPTIMIZE__ #define NSLog(...) NSLog(__VA_ARGS__) #else #define NSLog(...){} #endif 打开 ...