相信很多人都听说过贝塞尔曲线,但是作为Android程序员的我们可能也没有具体的使用过贝塞尔曲线!好吧!是我之前没用过.......

关于贝塞尔曲线的介绍我就不多罗嗦了晚上有很多的文章,这里我给出一篇供大家参考:

http://blog.csdn.net/cdnight/article/details/48468653

这里给出一个github的开源库,大家可以看看贝塞尔曲线的效果:

https://github.com/venshine/BezierMaker

挺好玩的,总的来说贝塞尔曲线最低为2阶且理论上无上限。

本篇文章通过一个简单的例子,来初步探索一下贝塞尔曲线,废话不多说我们开始。

献上效果图:

1.gif

是不是挺有意思的呢?

实现思路:

1、画一条路径

通过Path工具类

2、获取手指移动的点的坐标,并将该点作为贝塞尔曲线的控制点

重写onTouchEvent()方法

3、实现回弹动画

自定义一个Animtion,当然也可以不自定义

具体代码实现

设置画笔:

private void init() {

pointA = new Point(100, 300);

pointB = new Point(500, 300);

pointCenter = new Point(200, 300);

mPaint = new Paint();

mPaint.setColor(Color.BLACK);

mPaint.setStrokeWidth(10);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setAntiAlias(true);

}

画路径:

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

bezierPath.reset();

bezierPath.moveTo(pointA.x, pointA.y);

//quadTo方法用于画贝塞尔曲线

bezierPath.quadTo(pointCenter.x, pointCenter.y, pointB.x, pointB.y);

//闭合path

// bezierPath.close();

canvas.drawPath(bezierPath, mPaint);

}

这里要注意的是path的quadTo(int cx,int cy,int px,int py)方法,这个方法就是用于画贝塞尔曲线的。参数cx、cy分别表示控制点的x、y坐标,px、py分别表示结束点的x、y坐标。要注意rQuadTo()方法的区别

重写onTouchEvent方法:

@Override

public boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();

int x = 0;

int y = 0;

switch (action) {

case MotionEvent.ACTION_DOWN: {

}

case MotionEvent.ACTION_MOVE: {

x = (int) event.getX();

y = (int) event.getY();

pointCenter.set(x, y);

}

break;

case MotionEvent.ACTION_UP: {

x = (int) event.getX();

y = (int) event.getY();

startCallbackAnim(x, y);

}

break;

}

invalidate();

return true;

}

最后写一个动画:

private void startCallbackAnim(int x, int y) {

ResetAnimation animation = new ResetAnimation(x, y);

animation.setDuration(300);

this.startAnimation(animation);

}

/**

* 自定义一个会弹动画

*/

class ResetAnimation extends Animation {

int orginX;

int orginY;

public ResetAnimation(int x, int y) {

orginX = x;

orginY = y;

}

/**

* 这个方法是为一个自定义动画需要重写的方法

*

* @param interpolatedTime 动画时间0~1.0

* @param t

*/

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

int newX = (int) ((orginX - 200) * (1 - interpolatedTime) + 200);

int newY = (int) ((orginY - 300) * (1 - interpolatedTime) + 300);

pointCenter.set(newX, newY);

invalidate();

super.applyTransformation(interpolatedTime, t);

}

}

代码很简单大家可以自己去实现以下!

动脑学院android 高级ui,动脑学院高级ui课程9.1:贝塞尔曲线简单介绍相关推荐

  1. Android把商品添加到购物车的动画效果(贝塞尔曲线)

    当我们写商城类的项目的时候,一般都会有加入购物车的功能,加入购物车的时候会有一些抛物线动画,具体代码如下: 实现效果如图: 思路: 确定动画的起终点 在起终点之间使用二次贝塞尔曲线填充起终点之间的点的 ...

  2. android 正弦曲线,Android 正弦和贝塞尔曲线简单应用

    本文主要就介绍如何使用正余弦或者贝塞尔曲线实现一个类似水波纹加载的动效.如果有看前面的文章,可以知道现在使用贝塞尔曲线相对比较容易,因为Android的Path中就有贝塞尔曲线的API,可以直接使用. ...

  3. 一起Talk Android吧(第四百二十回:贝塞尔曲线)

    文章目录 基本概念 绘制方法 具体示例 各位看官们,大家好,上一回中咱们说的例子是"让时钟走起来",这一回咱们介绍的例子是" 贝塞尔曲线".闲话休提,言归正转, ...

  4. <android>水滴效果的进度条 DripProgressView(二阶贝塞尔曲线自定义view)

    最近写了一个水滴效果的进度条,加了点特效,就是个简单的自定义view,用的二阶贝塞尔函数,如果有赶工期或者正好碰到类似效果需求的同伴们可以直接改改来用,提供 setProgress(float por ...

  5. Android Studio Canvas 实现鼠标贝塞尔曲线拖尾特效

    Android Studio Canvas 实现鼠标贝塞尔曲线拖尾特效 特效预览图 什么是贝塞尔曲线? 百度百科: ​ 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图 ...

  6. Android Studio Canvas 实现鼠标贝塞尔曲线拖尾特效(富文本编辑器)

    特效预览图 什么是贝塞尔曲线? 百度百科: 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线.一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段 ...

  7. android sin 曲线,Android 贝塞尔曲线实践——旋转的七色花朵

    一.关于贝塞尔曲线 在工业设计方面贝塞尔曲线有很多用途,同样,在Android中,贝塞尔曲线结合Path类可以实现更复杂的图形,这里我们给一个案例,来实现一种旋转的花朵.对于贝赛尔曲线的理解,建议参考 ...

  8. Android开发——贝塞尔曲线解析

    相信很多同学都知道"贝塞尔曲线"这个词,我们在很多地方都能经常看到.利用"贝塞尔曲线"可以做出很多好看的UI效果,本篇博客就让我们一起学习"贝塞尔曲线 ...

  9. Android 贝塞尔曲线解析

    相信很多同学都知道"贝塞尔曲线"这个词,我们在很多地方都能经常看到.利用"贝塞尔曲线"可以做出很多好看的UI效果,本篇博客就让我们一起学习"贝塞尔曲线 ...

最新文章

  1. Error in Math.factor(x) : ‘abs’ not meaningful for factors
  2. Android Tabhost with FragmentActivity
  3. java理解程序逻辑_使用java理解程序逻辑(5)
  4. 【git】.gitignore文件
  5. 中国的这些民居都是你没见过的!
  6. 02-线性结构2 一元多项式的乘法与加法运算 (20 分)
  7. ST-Link刷成J-Link
  8. .net mysql数据库_.net连接MySQL数据库
  9. libuv 和 libev的对比
  10. iOS 开发中遇到的问题
  11. mysql计算个税_2019年个人所得税计算函数
  12. PHP Include文件
  13. 包含新房二手房租房功能的房产小程序开发方案
  14. Oracle 存储过程中自定义异常
  15. sp/计算机产品与流通,计算机产品与流通杂志
  16. python获取网页链接地址
  17. 女人嫁错人,但又离不了婚,过来人告诉你该怎么办
  18. 优雅的交流的注意点-能量的发源地-潜意识
  19. winform直接控制云台_299元,246g,260mm,一天销量破万的智云最新手机云台深度评测...
  20. SVG公众号排版 | 多段自动展开过程会卡住,无法完全展开!

热门文章

  1. 如何在飞速发展的今天保持不断学习的动力
  2. 您的企业适合导入APS系统吗?跟着小编来了解一下吧(上)
  3. 前向传播算法(Forward propagation)与反向传播算法(Back propagation)
  4. http工具类发送post和get请求
  5. Docker查看容器的IP地址
  6. wps怎么投递简历发到boss直聘_boss直聘怎么投简历
  7. 对于一个网络营销新手,需要掌握哪些网络营销基础知识
  8. 使用NDK编译OpenSSL与curl
  9. Alientek I.MX6UL Linux- 第七章 ARM汇编基础
  10. [转载]【Alientek STM32 实验2】--按键输入