Android之自定义View学习(一)

Canvas常用方法:

                                   图片来源

/**
* Created by SiberiaDante on 2017/6/3.
*/ public class BaseViewDraw extends View {
private Paint mPaint1;
private Paint mPaint2;
private Paint mPaint3;
private Paint mPaint4; public BaseViewDraw(Context context) {
super(context);
} public BaseViewDraw(Context context, AttributeSet attrs) {
super(context, attrs);
initPaint();//初始化画笔
} public BaseViewDraw(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} private void initPaint() {
mPaint1 = new Paint();
mPaint1.setColor(Color.BLUE);//设置画笔颜色
mPaint1.setStrokeWidth(10f);//设置画笔宽度
mPaint1.setStyle(Paint.Style.FILL);//设置画笔填充模式 mPaint2 = new Paint();
mPaint2.setColor(Color.RED);
mPaint2.setStrokeWidth(20f);
mPaint2.setStyle(Paint.Style.FILL_AND_STROKE); mPaint3 = new Paint();
mPaint3.setColor(Color.BLACK);
mPaint3.setStrokeWidth(15f);
mPaint3.setStyle(Paint.Style.STROKE); mPaint4 = new Paint();
mPaint4.setColor(Color.GREEN);
mPaint4.setStrokeWidth(5f);
mPaint4.setStyle(Paint.Style.STROKE);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/**
* 画颜色
* 了解更多canvas前往官方文档:https://developer.android.com/reference/android/graphics/Canvas.html
*/
canvas.drawColor(Color.GRAY);
/**
* 画点
*/
canvas.drawPoint(200, 200, mPaint1);//画一个点----200,200分别代表在想,x,y轴上的坐标
canvas.drawPoints(
new float[]{//画多个点
300, 300,
300, 400,
300, 500
}, mPaint1);
/**
* 画线条
*/
canvas.drawLine(10, 10, 200, 500, mPaint1);//10,10代表起点,200,500代表终点
canvas.drawLines(new float[]{//画多条线段
20, 20, 600, 20,
50, 200, 50, 600}, mPaint1); /**
* 画矩形,三种写法
* 了解更多 Rect前往官方文档:https://developer.android.com/reference/android/graphics/Rect.html
* 了解更多 RectF前往官方文档:http://developer.android.com/reference/android/graphics/RectF.html
*/
//第一种
canvas.drawRect(500, 100, 800, 400, mPaint1);
//第二种
final Rect rect = new Rect(500, 500, 800, 800);
canvas.drawRect(rect, mPaint1);
//第三种
final RectF rectF = new RectF(500, 900, 800, 1200);
canvas.drawRect(rectF, mPaint1);
/**
* 绘制圆角矩形
*/
//方法一
final RectF rectF1 = new RectF(100, 900, 400, 1200);
//10,30分别代表圆弧的半径
canvas.drawRoundRect(rectF1, 10, 30, mPaint2);
//方法二
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//这种写法仅支持API21+
canvas.drawRoundRect(100, 900, 400, 1200, 10, 30, mPaint2);
} /**
* 画椭圆
* 350为矩形x轴长度的一半
* 150为矩形y轴长度的一半
*/
final RectF rectF2 = new RectF(100, 500, 800, 800);
canvas.drawRoundRect(rectF2, 350, 150, mPaint3); /**
* 画圆
* 350为矩形x轴长度的一半
* 350为矩形y轴长度的一半
* 当矩形的长和宽相等时,即为圆
*/
//方法一:利用矩形绘制椭圆技巧
final RectF rectF3 = new RectF(100, 500, 800, 1200);
canvas.drawRoundRect(rectF3, 350, 350, mPaint3);
//方法二:550,800代表圆心位置,400代表圆半径
canvas.drawCircle(550, 800, 400, mPaint3); /**
* 画圆弧
* 0,90分别代表弧度的起始和结束弧度,顺时针为正,区分数学中的逆时针为正
* 第三个Boolean型参数:true为使用中心点,false为不使用中心点,即为一段弧线(不填充状态下)
*/
final RectF rectF4 = new RectF(400, 400, 800, 1200);
canvas.drawArc(rectF4, 0, 90, true, mPaint4); final RectF rectF5 = new RectF(100, 400, 400, 1200);
canvas.drawArc(rectF5, 0, 90, false, mPaint4); }
}

github地址:https://github.com/SiberiaDante/DrawView

Android之自定义View学习(一)的更多相关文章

  1. Android读取自定义View属性

    Android读取自定义View属性 attrs.xml : <?xml version="1.0" encoding="utf-8"?> < ...

  2. Android 自己定义View学习(2)

    上一篇学习了基本使用方法,今天学一下略微复杂一点的.先看一下效果图 为了完毕上面的效果还是要用到上一期开头的四步 1,属性应该要有颜色,要有速度 <?xml version="1.0& ...

  3. 简单说说Android自定义view学习推荐的方式

    这几天比较受关注,挺开心的,嘿嘿. 这里给大家总结一下学习自定义view的一些技巧.  以后写自定义view可能不会写博客了,但是可以开源的我会把源码丢到github上我的地址:https://git ...

  4. Android自定义View学习(四)

    硬件加速 参考:HenCoder Android 自定义 View 1-8 硬件加速 硬件加速能够让绘制变快,主要有三个原因: 本来由 CPU 自己来做的事,分摊给了 GPU 一部分,自然可以提高效率 ...

  5. Android自定义View学习(二)

    绘制顺序 参考:HenCoder Android 开发进阶:自定义 View 1-5 绘制顺序 绘制过程 包括 背景 主体(onDraw()) 子 View(dispatchDraw()) 滑动边缘渐 ...

  6. Android自定义View学习笔记(一)

    绘制基础 参考:HenCoder Android 开发进阶: 自定义 View 1-1 绘制基础 Paint详解 参考:HenCoder Android 开发进阶: 自定义 View 1-2 Pain ...

  7. Android之自定义View的实现

    对于学习Android开发的小童鞋对于自定义View一定不会陌生,相信大家对它是又爱又恨,爱它可以跟随我们的心意设计出漂亮的效果:恨它想要完全流畅掌握,需要一定的功夫.对于初学者来说确实很不容易,网上 ...

  8. 20170831工作日记--自定义View学习

    学习了LayoutInflater的原理分析.视图的绘制流程.视图的状态及重绘等知识,按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件.组合控件.以及继承控件.那么下面我们就来依次 ...

  9. android开发:Android 中自定义View的应用

    大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码: <?xml version="1.0&q ...

随机推荐

  1. docker save和docker export的区别

    docker save保存的是镜像(image),docker export保存的是容器(container): docker load用来载入镜像包,docker import用来载入容器包,但两者 ...

  2. 20145207《Java程序设计》实验五(网络编程与安全)实验报告

    <Java 程序设计>实验五(网络编程与安全)实验报告 目录 改变 网络编程与安全实验要求 实验成果 课后思考 改变 修改了之前仅仅是贴了图片,连代码都没粘的状态.不过这篇博客我只能做到写 ...

  3. Autovacuum 的运行限制

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 作者:高健@博客园  luckyjackgao ...

  4. MySQL中类型后面的数字含义

    形式:类型(m) 1.整数型的数值类型已经限制了取值范围,有符号整型和无符号整型都有,而M值并不代表可以存储的数值字符长度,它代表的是数据在显示时显示的最小长度,当存储的字符长度超过M值时,没有任何的 ...

  5. X5webview去掉分享功能和缓存功能

    x5webview比原生的webview适配更好,加载更快,对音视频的兼容性更好,具备独特的优势 1) 速度快:相比系统webview的网页打开速度有30+%的提升: 2) 省流量:使用云端优化技术使 ...

  6. VRRP+tunnel+IP SLA+Track实现冗余切换

    IP SLA(Internet Protocol Service-Level Agreement)互联网服务等级协议,本实验里通过发送测试报文,测试下一跳是否可达,结合Track实现冗余静态路由的切换 ...

  7. java练习(一)数组、集合的运用

    有这么一个有趣的问题,问:有这么一个不重复的自然数数组,自然数长度为N,而数组长度为N-2,依次随机把自然数放进数组中,请找出2个没有被放进去的自然数.例如:这个自然数数组是[0, 1, 2, 3,  ...

  8. Installshield相关的后续操作<一>图解

    1.XML文件读取 选择需要读取XML文件 2.SQL数据库的安装 这里选择的文件是数据库脚本.如果脚本没有创建数据库的语句,还需手动输入. 3.自定义界面Dialogs 下一步: 上面红色框框里面是 ...

  9. [Processing]点到线段的最小距离

    PVector p1,p2,n; float d = 0; void setup() { size(600,600); p1 = new PVector(150,30);//线段第一个端点 p2 = ...

  10. LinuxMint 18.3禁用ipv6

    编辑/etc/sysctl.conf文件,添加如下内容 net.ipv6.conf.all.disable_all = 1 保存后执行 sudo sysctl -p 即可生效