全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android贝塞尔曲线初步学习第一课

贝塞尔曲线有一阶、二阶、三阶、N阶

一阶就是一条直线,有起点终点,没有控制点,对应方法就是

canvas.drawLine(float startX, float startY, float stopX, float stopY, @NonNull Paint paint) ;

二阶为曲线,有起点终点,一个控制点,对应方法就是

path.quadTo(float x1, float y1, float x2, float y2);

其中x1、y1为控制点坐标, x2、y2为终点坐标,效果如下:

三阶由俩个控制点控制,对应方法就是

path.cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);

其中x1、y1、x2、y2为两个控制点坐标, x3、y3为终点坐标,效果如下:

做一个demo巩固一下用法:

新建一个SecondBezierView继承View,重写构造方法、初始化画笔、固定起点和终点的坐标,重写onTouchEvent()方法获取当前点击的点为控制点:

 @Override
 public boolean onTouchEvent(MotionEvent event) {
 switch (event.getAction()) {
 case MotionEvent.ACTION_MOVE:
 mControlX = event.getX();
 mControlY = event.getY();
 invalidate();
 break;
 }
 return true;
 }

在onDraw()方法中画点、画连接线、画文本、画二阶贝塞尔曲线

 @Override
 protected void onDraw(Canvas canvas) {
 super.onDraw(canvas);
 canvas.drawCircle(mStartX, mStartY, 8, mLinePaint);
 canvas.drawText("起点", mStartX, mStartY, mLinePaint);
 canvas.drawCircle(mEndX, mEndY, 8, mLinePaint);
 canvas.drawText("终点", mEndX, mEndY, mLinePaint);
 canvas.drawCircle(mControlX, mControlY, 8, mLinePaint);
 canvas.drawText("控制点", mControlX, mControlY, mLinePaint);
 canvas.drawLine(mStartX, mStartY, mControlX, mControlY, mLinePaint);
 canvas.drawLine(mEndX, mEndY, mControlX, mControlY, mLinePaint);

 mBezierPath.reset();//因为不断重绘,path的路径也要重置,不然页面上会显示很多条线
 mBezierPath.moveTo(mStartX, mStartY);//移至起点
 mBezierPath.quadTo(mControlX, mControlY, mEndX, mEndY);//二阶贝塞尔曲线,传入控制点和终点坐标
 canvas.drawPath(mBezierPath, mBezierPaint);
 }

最后添加一个回弹的动画,用的是OvershootInterpolator插值器,在onTouchEvent的MotionEvent.ACTION_UP中:

 case MotionEvent.ACTION_UP:
 ValueAnimator animX = ValueAnimator.ofFloat(mControlX, getWidth() / 2);
 animX.setDuration(500);
 animX.setInterpolator(new OvershootInterpolator());
 animX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
 @Override
 public void onAnimationUpdate(ValueAnimator animation) {
 mControlX = (float) animation.getAnimatedValue();
 invalidate();
 }
 });
 animX.start();
 ValueAnimator animY = ValueAnimator.ofFloat(mControlY, getHeight() / 2);
 animY.setDuration(500);
 animY.setInterpolator(new OvershootInterpolator());
 animY.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
 @Override
 public void onAnimationUpdate(ValueAnimator animation) {
 mControlY = (float) animation.getAnimatedValue();
 invalidate();
 }
 });
 animY.start();
 break;

再来个三阶的

主要就是用到了多点触控:

 private boolean mIsSecondPoint = false;

 @Override
 public boolean onTouchEvent(MotionEvent event) {
 switch (event.getAction() & MotionEvent.ACTION_MASK) {//多点触控
 case MotionEvent.ACTION_POINTER_DOWN:
 mIsSecondPoint = true;
 break;
 case MotionEvent.ACTION_POINTER_UP:
 mIsSecondPoint = false;
 break;
 case MotionEvent.ACTION_MOVE:
 mControlX1 = event.getX(0);//获取控制点1的横纵坐标
 mControlY1 = event.getY(0);
 if (mIsSecondPoint) {
  mControlX2 = event.getX(1);//获取控制点2的横纵坐标
  mControlY2 = event.getY(1);
 }
 invalidate();
 break;
 }
 return true;
 }

然后再onDraw()中画三阶贝塞尔曲线

 mBezierPath.reset();
 mBezierPath.moveTo(mStartX, mStartY);
 mBezierPath.cubicTo(mControlX1, mControlY1, mControlX2, mControlY2, mEndX, mEndY);
 canvas.drawPath(mBezierPath, mBezierPaint);

大功告成,打完收工。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # 贝塞尔曲线  # Android把商品添加到购物车的动画效果(贝塞尔曲线)  # Android中贝塞尔曲线的绘制方法示例代码  # android中贝塞尔曲线的应用示例  # Android 利用三阶贝塞尔曲线绘制运动轨迹的示例  # Android贝塞尔曲线初步学习第三课 Android实现添加至购物车的运动轨迹  # Android贝塞尔曲线实现手指轨迹  # Android贝塞尔曲线实现填充不规则图形并随手指运动  # Android使用贝塞尔曲线仿QQ聊天消息气泡拖拽效果  # Android贝塞尔曲线实现消息拖拽消失  # android贝塞尔曲线实现波浪效果  # 塞尔  # 多点  # 重写  # 的是  # 触控  # 有一  # 也要  # 再来  # 大功告成  # 然后再  # 做一个  # 打完  # 上会  # 大家多多  # 移至  # 新建一个  # 点为  # 插值  # demo  # SecondBezierView 


相关文章: 购物网站制作公司有哪些,哪个购物网站比较好?  宝塔面板如何快速创建新站点?  如何在IIS中新建站点并解决端口绑定冲突?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  广东企业建站网站优化与SEO营销核心策略指南  如何在搬瓦工VPS快速搭建网站?  怀化网站制作公司,怀化新生儿上户网上办理流程?  php json中文编码为null的解决办法  建站主机是什么?如何选择适合的建站主机?  如何在万网自助建站平台快速创建网站?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何访问已购建站主机并解决登录问题?  如何高效配置香港服务器实现快速建站?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  建站之星如何配置系统实现高效建站?  ,sp开头的版面叫什么?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何用已有域名快速搭建网站?  制作网页的网站有哪些,电脑上怎么做网页?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  建站之星在线客服如何快速接入解答?  建站之星安装步骤有哪些常见问题?  如何通过VPS搭建网站快速盈利?  江苏网站制作公司有哪些,江苏书法考级官方网站?  c++ stringstream用法详解_c++字符串与数字转换利器  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  外贸公司网站制作哪家好,maersk船公司官网?  css网站制作参考文献有哪些,易聊怎么注册?  建站之星后台密码遗忘?如何快速找回?  无锡营销型网站制作公司,无锡网选车牌流程?  网站制作需要会哪些技术,建立一个网站要花费多少?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  网站微信制作软件,如何制作微信链接?  ,交易猫的商品怎么发布到网站上去?  浅析上传头像示例及其注意事项  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  广平建站公司哪家专业可靠?如何选择?  深入理解Android中的xmlns:tools属性  如何在腾讯云服务器快速搭建个人网站?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  如何获取免费开源的自助建站系统源码?  Android自定义控件实现温度旋转按钮效果  在线制作视频网站免费,都有哪些好的动漫网站?  高防服务器租用如何选择配置与防御等级?  建站之星如何保障用户数据免受黑客入侵? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。