android自定义曲线控件,Android自定义view进阶-- 神奇的贝塞尔曲线

上一篇介绍了自定义view需要知道的基本函数。新开一篇献给借给我vpn的深圳_奋斗小哥。

转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50492828

今天给大家介绍一个非常神奇的曲线,贝塞尔曲线。相信大家之前都有耳闻。

很久之前就久闻该线大名,但是一直不是很了解,在经过一番谷歌之后,有了初步的概念:三点确定一条曲线:起点,终点,辅助点。

三个点的基本关系如下:

910cb3dbbec0282b14ac7682e933f544.gif

当初看这图我也看了老半天,只知道是非常平滑,不知道三个点的具体关系,于是变写了一段程序来测试辅助点与始终点的关系。

Android 的Path类提供了绘制二阶贝塞尔曲线的方法,使用方法如下:

//设置起点

path.moveTo(200,200);

//设置辅助点坐标 300,200 终点坐标400,200

path.quadTo(300, 200, 400, 200);

这里我将贝塞尔曲线的辅助点y轴和起始点设置相同,draw以后效果如下:

d4f6380a536fb502f0305751e4ad4034.png

kjdwb6vq5N

看到是一条直线,这是因为他y轴没有拉伸,只是x轴进行了拉伸。把辅助点y+100尝试

kjdwb6vq5N

f609558a1269e466407209b82b5b444d.png

看到已经拉伸。。其实这样还是不能很好的体现 贝塞尔曲线的规律。 所以要持续改变,研究他的规律,这里重写onTouchEvent,让触摸点的位置作为辅助点。观察变化。

@Override

protected void onDraw(Canvas canvas) {

Paint p = new Paint();

p.setStyle(Paint.Style.STROKE);

p.setStrokeWidth(10);

Path path = new Path();

path.moveTo(200, 200);

path.quadTo(mSupX, mSupY, 400, 200);

canvas.drawPath(path,p);

super.onDraw(canvas);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()){

case MotionEvent.ACTION_MOVE:

mSupX = event.getX();

mSupY = event.getY();

invalidate();

}

return true;

}

d493dc5485f2a0fc9c07c622a1b5f040.gif

可以看到 是根据鼠标位置变化的曲线,可是现在还是不能很好的表现曲线的突出点和辅助点关系,接下来把辅助点也画出来,方便观察。

canvas.drawPoint(mSupX,mSupY,p);

665c8608ec0272b81c615bf9c6e3f53a.gif

这下,辅助点和曲线的关系就很明显了。

许多炫酷的效果都离不开贝塞尔曲线,贝塞尔曲线的应用:仿360内存清理效果。

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

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

Android自定义View (二) 进阶

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24300125 继续自定义View之旅,前面已经介绍过一个自定义View的基础的例 ...

Android 自定义View (二) 进阶

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24300125 继续自定义View之旅,前面已经介绍过一个自定义View的基础的例 ...

我的Android进阶之旅------>Android自定义View实现带数字的进度条(NumberProgressBar)

今天在Github上面看到一个来自于 daimajia所写的关于Android自定义View实现带数字的进度条(NumberProgressBar)的精彩案例,在这里分享给大家一起来学习学习!同时感谢 ...

Android 自定义 View 圆形进度条总结

Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...

Android自定义View

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24252901 很多的Android入门程序猿来说对于Android自定义View ...

安卓自定义View进阶-Canvas之画布操作 转载

安卓自定义View进阶-Canvas之画布操作 转载 https://www.gcssloop.com/customview/Canvas_Convert 本来想把画布操作放到后面部分的,但是发现很多 ...

Android 自定义View合集

自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...

[原] Android 自定义View步骤

例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能 ...

随机推荐

java 数组详解

from : http://blog.csdn.net/jionjionyoushen/article/details/6223006 1.关于数组的特点 1)在Java中,无论使用数组或集合,都有边 ...

Halcon与opencv格式的转换

IplImage* ImageProcess::HImageToIplImage(Hobject &Hobj) { IplImage* pImage; HTuple htChannels; c ...

ELK+kafka构建日志收集系统

ELK+kafka构建日志收集系统   原文  http://lx.wxqrcode.com/index.php/post/101.html   背景: 最近线上上了ELK,但是只用了一台Redis在 ...

LCS算法思想

LCS问题就是求两个字符串最长公共子串的问题.解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0.然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的 ...

[转]如何申请和管理一个sourceforge项目

假如你没有贡献免费源代码的想法,就不用继续读本文了.:) 如果读者的e文不错,作者建议你直接阅读sourceforge的 howto文档,他们整理得非常周到详实.本文只是作者的使用经验,也许可以给与作 ...

RH133读书 笔记(5) - Lab 5 User and Group Administration

Lab 5 User and Group Administration Goal: To build skills for user and group administration. Estimat ...

httpd: Could not reliably determine the server's fully qualified domain name

作者:Younger Liu, 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. 问题描述: AH00558: httpd: Could not reliab ...

python模块之argparse--参数解析

一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于 解析命令行参数,例如python parseTe ...

[LeetCode] Partition Labels 分割标签

A string S of lowercase letters is given. We want to partition this string into as many parts as pos ...

老婆大人 split,slice,splice,replace的用法

split()方法用于把一个字符串分割成字符串数组 str.split("字符串/正则表达式从该参数制定额地方分割str",可选,可指定返回数组的最大长度,如果没设置参数,整个字符 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值