Paint的基本使用
前言
在讲述自定义控件的时候,我们讲到了自定义控件的基本步骤,那么在自定义控件中,我们第一个需要了解的就是Paint,即画笔。那么今天就来讲讲paint的基本使用。
自定义控件概述
今天要讲的内容包括:
- Paint画笔的基本使用
- Paint设置宽度时需要注意的地方
- 利用paint开发的一个简单示例
- 项目结构图和效果图
一.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的基本使用
Paint的基本使用的更多相关文章
- 详解Paint的setXfermode(Xfermode xfermode)
一.setXfermode(Xfermode xfermode) Xfermode国外有大神称之为过渡模式,这种翻译比较贴切但恐怕不易理解,大家也可以直接称之为图像混合模式,因为所谓的“过渡”其实就是 ...
- android Canvas 和 Paint用法
自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...
- [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 ...
- [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 ...
- [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 ...
- xp系统重绘边框线不显示(首次加载没有触发paint事件)
同样是,重绘边框事件,win7系统显示正常,而xp系统却不显示,这是什么原因造成的呢? 于是,小编开始百度,不停的查找原因,通过一番查找,小编也意外的收获了一些内容: 例如:窗口的拖动,放大,缩小,等 ...
- LeetCode Paint House II
原题链接在这里:https://leetcode.com/problems/paint-house-ii/ 题目: There are a row of n houses, each house ca ...
- LeetCode Paint House
原题链接在这里:https://leetcode.com/problems/paint-house/ 题目: There are a row of n houses, each house can b ...
- zjuoj 3773 Paint the Grid
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3773 Paint the Grid Time Limit: 2 Secon ...
- zjuoj 3780 Paint the Grid Again
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Paint the Grid Again Time Limit: 2 ...
随机推荐
- ArcEngine C++ 10 程序的运行环境,ArcEngine RT的授权
以前我一直以为 必须安装 Arcgis Desktop才可以授权,发现我错了,原来是这个样子的. 一.安装License manager,并授权许可server.txt 当然这个license也可以安 ...
- linux上安装wps办公软件
在rhel6.3上安装 金山WPS rpm包时,容易出现出现错误wps Requires: libstdc++.so.6(GLIBCXX_3.4.14).即使安装成功,也不能够使用,只是缺少了一个li ...
- 为sharepoint的内部页面添加后台代码
我们知道,存储在数据库里的SharePoint页面是不能直接添加后台代码的,这给我们带来了很多的不方便,比如想要在页面上实现一些东西,都必 须使用Webpart或者自定义控件的方式,哪怕仅仅是很简单的 ...
- 如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件
很久都没写什么博客了,前一段时间学习2008 R2时,在自己的电脑上同时安装AD 和证书 往往会出现一个CertificationAuthority错误,如下: 产生问题的主要原因是: 证书服务器与D ...
- MFC中设备描述表dc的使用
以下代码我是在View类中实现的: /** 利用平台SDK实现画线功能 // 首先获得窗口的设备描述表 HDC hdc; hdc = ::GetDC( m_hWnd ); //调用的是平台SDK的成员 ...
- centos配置ssh免密码登录
master.slave1两台机器实现ssh免密码登录,user:hadoop,passwd:123456 1.设置master: vi /etc/sysconfig/network hostname ...
- php5.6 的interactive模式
1. 发现运行php 的interactive shell 的时候,不能输入一行执行一行,而要 输入完一整段内容,再按 ctrl + d才能执行这段内容. 原因是,没安装 readline这个模块, ...
- OpenNebula学习第四节之磁盘镜像的制作
一.准备工作 需要准备一个Ubuntu16.04的ISO文件上传至服务器,如下图所示 二.操作步骤 2.1:创建操作目录 创建一个/var/tmp/cloud_image目录,把Ubuntu16.04 ...
- curl_setopt — 设置 cURL 传输选项
curl_setopt (PHP 4 >= 4.0.2, PHP 5, PHP 7) curl_setopt — 设置 cURL 传输选项 bool curl_setopt ( resource ...
- 2014年10月底/终于/HTML5定稿……/技术从来不会成为发展的绝对瓶颈/反而商业成了无法逾越的鸿沟【转载+整理】
原文地址 本文内容 一.HTML5 诞生 二.HTML5 第一阶段: Web 增强与打破垄断 三.HTML5 第二阶段: 移动互联网 四.HTML5 这回真的来了 五.颠覆原生 App 六.还有什么会 ...