Path详解










一阶贝塞尔曲线,表示的是一条直线












or(效果等效,一个绝对位置一个相对位置)



贝塞尔曲线





多阶贝塞尔曲线

package com.netease.canvas_bezier;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.view.MotionEvent;
import android.view.View;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;public class BezierView extends View {private Paint mPaint;private Paint mLinePointPaint;private Path mPath;private List<PointF> mControlPoints;//控制点集合(包含数据点)public BezierView(Context context) {super(context);mPaint = new Paint();mPaint.setAntiAlias(true);mPaint.setStrokeWidth(4);mPaint.setStyle(Paint.Style.STROKE);mPaint.setColor(Color.RED);mLinePointPaint = new Paint();mLinePointPaint.setAntiAlias(true);mLinePointPaint.setStrokeWidth(4);mLinePointPaint.setStyle(Paint.Style.STROKE);mLinePointPaint.setColor(Color.GRAY);mPath = new Path();mControlPoints = new ArrayList<>();init();}private void init() {mControlPoints.clear();Random random = new Random();for (int i = 0; i < 9; i++) {int x = random.nextInt(800) + 200;int y = random.nextInt(800) + 200;PointF pointF = new PointF(x, y);mControlPoints.add(pointF);}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//控制点及控制点的连线int size = mControlPoints.size();PointF pointF;for (int i = 0; i < size; i++) {pointF = mControlPoints.get(i);if (i > 0) {mLinePointPaint.setColor(Color.GRAY);//控制点连线canvas.drawLine(mControlPoints.get(i - 1).x, mControlPoints.get(i - 1).y, pointF.x, pointF.y, mLinePointPaint);}//起点、终点换颜色if (i == 0) {mLinePointPaint.setColor(Color.RED);} else if (i == size - 1) {mLinePointPaint.setColor(Color.BLUE);}canvas.drawCircle(pointF.x, pointF.y, 10, mLinePointPaint);}//曲线连接
//        buildBezierPoints();calculate();canvas.drawPath(mPath, mPaint);}private ArrayList<PointF> calculate() {mPath.reset();//控制点个数(number-1阶)int number = mControlPoints.size();//小于2阶省略if (number < 2) {return null;}ArrayList<PointF> points = new ArrayList<>();//计算杨辉三角int[] mi = new int[number];mi[0] = mi[1] = 1;//第二层(一阶常数项)for (int i = 3; i <= number; i++) {//得到上一层的数据int[] t = new int[i - 1];for (int j = 0; j < t.length; j++) {t[j] = mi[j];}//计算当前行的数据mi[0] = mi[i - 1] = 1;for (int j = 0; j < i - 2; j++) {mi[j + 1] = t[j] + t[j + 1];}}//计算坐标点for (int i = 0; i < 1000; i++) {float t = (float) i / 1000;//分别计算x,y坐标//计算各项和(												

贝塞尔曲线与计算规则(实现QQ气泡效果)相关推荐

  1. Android高级-贝塞尔曲线与计算规则

    我们先看Path详解: 我们还是从demo看吧 看demo 运行结果: 去掉闭合: 其中 mPath.rLineTo和mPaht.lineTo效果是一样的,我们看一下区别: 运行效果: 我们可以看到, ...

  2. 贝塞尔曲线(Bezier)之 QQ 消息拖拽动画效果

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  3. Android自定义View实现QQ气泡效果

    首先我们来看一下最终的效果: 根据我们上边拆分出来的公式,我们分别看看每一个效果需要如何去实现: 红色圆:canvas.drawCircle 消息数字:canvas.drawText 拖拽粘性效果:c ...

  4. 自定义控件:QQ气泡效果粘性控件的实现

    学习目的 了解几何图形工具的用法 掌握画不规则图形的方法 应用场景:未读提醒,效果图: 绘制一帧的效果 画一帧粘性控件的步骤分析 画一个固定圆 画一个拖拽圆 画中间连接部分 将中间连接部分水平放置,四 ...

  5. 贝塞尔曲线动画demo(仿美人相机效果)

    效果如图: 仿美人相机,手势滑动隐藏顶部view.为了方便讲解,将屏幕分为几个区域,如图: 在拖动过程中: 1.拖动距离小于minMoveDistance,贝赛尔曲线发生形变 2.拖动大于minMov ...

  6. html5贝塞尔曲线,Canvas学习:贝塞尔曲线

    在绘制圆和圆弧一节中,了解到在Canvas中可以使用arc()和arcTo()绘制制圆或弧线,但很多时候,仅这两个方法还不能满足我们实际的需求,特别是绘制复杂的曲线.不过值得庆幸的是,在Canvas中 ...

  7. [图形学]习题解析1:一文搞懂贝塞尔曲线题目的计算

    给定4点P1(0,0,0)P_1(0,0,0)P1​(0,0,0),P2(1,1,1)P_2(1,1,1)P2​(1,1,1),P3(2,−1,−1)P_3(2,-1,-1)P3​(2,−1,−1), ...

  8. android高级UI之贝塞尔曲线<上>---基本概念、德卡斯特里奥算法

    在上一次android高级UI之Canvas综合案例操练 - cexo - 博客园对于Android UI绘制中核心的Canvas进行了相关的学习,这块的学习也中断一年多了,既然主业是Android开 ...

  9. Android 高级UI解密 (四) :花式玩转贝塞尔曲线(波浪、轨迹变换动画)

    讲解此UI系列必然少不了一个奇妙数学曲线-–贝塞尔曲线,它目前运用于App的范围是在太广了,最初的QQ气泡拖拽,到个人界面的波浪效果.Loading波浪效果,甚至于轨迹变化的动画都可以依赖贝塞尔曲线完 ...

最新文章

  1. 京东数科业务架构全披露,陈生强发布城市操作系统和京东钼媒
  2. 既可输入又可选择的组件
  3. 全球计算机与工程学科排名:MIT夺冠 中国23所高校上榜
  4. 使用SAP云平台的destination消费Internet上的OData service
  5. [转载] 纯函数和函数柯里化
  6. leetcode二分查找
  7. PostgreSQL复制特性历史漫谈-士别三日,当刮目相看
  8. GStreamer基础教程04 - 动态连接Pipeline
  9. MonetDB heap bug?
  10. 如何Python写一个安卓APP
  11. Python数字转换中文大写
  12. 北京人工智能产业联盟成立,百度CTO王海峰出任联盟理事长
  13. Webpack是什么?(webpack初学简单易理解)
  14. 开发Python用什么工具好?
  15. 德国电信疫情期间净赚9个亿
  16. No browser is open都是什么鬼
  17. 自考计算机专业的草根,一个外行草根自学中医的历程和经验分享!人人皆可学,求人不如求己!...
  18. c# 控制台485串口连接
  19. CDH学习之查看日志之Cloudera Manager Server是否启动成功
  20. guacamole1.4.0安装记录

热门文章

  1. puzzle(0311)《棋盘》内固、外固
  2. Spyder5.0语言设置中文 解决方案
  3. Firefly(流萤): 中文对话式大语言模型
  4. No module named 'pylab'解决
  5. 最新taobao自动化数据采集源码实战
  6. HTTP请求方式GET/POST
  7. 小米空气净化器有用即将面世
  8. APP自动化测试——Appium运行环境搭建保姆级教程
  9. console彩蛋——藏在console的招聘信息
  10. 利用go执行nmap命令