Android实现Path平滑的涂鸦效果实例

前言

在最近的一个项目中做了一个涂鸦的效果,手指快速移动,会出现折线,这篇文章记录笔触优化。下面话不多说了,来一起看看详细的介绍吧。

优化前

优化

设计到的类:Paint,Path

Path类记录了坐标点集合决定线条轨迹,Paint决定怎么画

Paint处理

//连接的外边缘以圆弧的方式相交
paint.setStrokeJoin(Paint.Join.ROUND);
//线条结束处绘制一个半圆
paint.setStrokeCap(Paint.Cap.ROUND);

Path处理

这里用的到有个叫贝塞尔曲线的概念。关于贝塞尔曲线公式,它是依据几个位置任意的点坐标绘制出的一条光滑曲线。
在Path添加点坐标的时候,使用Path#quadTo(float,float,float,float) 代替 Path#lineTo(float,float) 

lineTo(float,float) 从上一个点到某个指定的点新增一条线

quadTo(float,float,float,float) 从上一个点到某个指定的点新增一条二次方的贝塞尔曲线

项目中用的时候,又小优化了一下,代码如下:

 if (Math.abs(lastX - x) < 3 && Math.abs(lastY - y) < 3) {
 } else {
  mPath.quadTo(lastX, lastY, (x + lastX) / 2, (y + lastY) / 2);
  lastX = x ;
  lastY = y ;
 }

效果

线条拐弯处是不是平滑了很多,仔细的童鞋可能会发现整个线条有参差不齐的感觉,这个是抖动导致的,这个我们以后再说。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android Path绘制贝塞尔曲线实现QQ拖拽泡泡

    这两天学习了使用Path绘制贝塞尔曲线相关,然后自己动手做了一个类似QQ未读消息可拖拽的小气泡,效果图如下: 最终效果图 接下来一步一步的实现整个过程. 基本原理 其实就是使用Path绘制三点的二次方贝塞尔曲线来完成那个妖娆的曲线的.然后根据触摸点不断绘制对应的圆形,根据距离的改变改变原始固定圆形的半径大小.最后就是松手后返回或者爆裂的实现. Path介绍: 顾名思义,就是一个路径的意思,Path里面有很多的方法,本次设计主要用到的相关方法有 moveTo() 移动Path到一个指定的点 qua

  • Android 使用Path实现涂鸦功能

    今天实现一个涂鸦效果,会分几步实现,这里有一个重要的知识点就是图层,要理解这个,不然你看这篇博客,很迷茫,迷茫的苍茫的天涯是我的爱,先从简单的需求做起,绘制一条线,代码如下: package com.tuya; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.util

  • Android自定义View系列之Path绘制仿支付宝支付成功动画

    前言 使用支付宝付款时,我们可以看到成功或者失败都会有个动画提示,如果我们需要做这样的效果的话,当然,你可以让设计师给你做个GIF,但是我们知道图像比较耗内存的,我们自己可以用代码实现还是代码实现好点吧. 效果 实现方法 首先我们需要了解PathMeasure这个类,这个类我们可以理解为用来管理Path.我们主要看几个方法. PathMeasure(): 构造方法 ,实例化一个对象 PathMeasure(Path path,boolean isClosed):传入Path对象和是否闭合,pat

  • Android通过Path实现搜索按钮和时钟复杂效果

    在Android中复杂的图形的绘制绝大多数是通过path来实现,比如绘制一条曲线,然后让一个物体随着这个曲线运动,比如搜索按钮,比如一个简单时钟的实现: 那么什么是path呢! 定义:path  就是路径,就是图形的路径的集合,它里边包含了路径里边的坐标点,等等的属性.我们可以获取到任意点的坐标,正切值. 那么要获取Path上边所有点的坐标还需要用到一个类,PathMeasure; PathMesure: PathMeasure是一个用来测量Path的类,主要有以下方法: 构造方法 公共方法 可

  • Android编程开发之在Canvas中利用Path绘制基本图形(圆形,矩形,椭圆,三角形等)

    本文实例讲述了Android编程开发之在Canvas中利用Path绘制基本图形的方法.分享给大家供大家参考,具体如下: 在Android中绘制基本的集合图形,本程序就是自定义一个View组件,程序重写该View组件的onDraw(Canvase)方法,然后在该Canvas上绘制大量的基本的集合图形. 直接上代码: 1.自定义的View组件代码: package com.infy.configuration; import android.content.Context; import andro

  • Android自定义View实现支付宝支付成功-极速get花式Path炫酷动画

    本文手把手教你图片->SVG->Path的姿势.. 从此酷炫Path动画,如此简单. 效果先随便上几个图,以后你找到的图有多精彩,gif就有多精彩: 随便搜了一个铅笔画的图,丢进去 随手复制的二维码icon 来自大佬wing的铁塔 前文回顾 这里简单回顾一下前文,GIF如下图: PathAnimView接受的唯一数据源是Path(给我一个Path,还你一个动画View) 所以内置了几种将别的资源->Path的方法: 直接传string.(A-Z,0-9 "." &qu

  • Android实现Path平滑的涂鸦效果实例

    前言 在最近的一个项目中做了一个涂鸦的效果,手指快速移动,会出现折线,这篇文章记录笔触优化.下面话不多说了,来一起看看详细的介绍吧. 优化前 优化 设计到的类:Paint,Path Path类记录了坐标点集合决定线条轨迹,Paint决定怎么画 Paint处理 //连接的外边缘以圆弧的方式相交 paint.setStrokeJoin(Paint.Join.ROUND); //线条结束处绘制一个半圆 paint.setStrokeCap(Paint.Cap.ROUND); Path处理 这里用的到有

  • Android背景图下拉回弹效果实例

    目录 Android实现背景图下拉回弹效果 效果 实现 总结 Android实现背景图下拉回弹效果 增加设置不横向拉伸时增加回弹效果 增加切换横屏时可滑动效果 效果 实现 public class HeadZoomScrollView extends NestedScrollView { public HeadZoomScrollView(Context context) { super(context); } public HeadZoomScrollView(Context context,

  • Android自定义控件eBook实现翻书效果实例详解

    本文实例讲述了Android自定义控件eBook实现翻书效果的方法.分享给大家供大家参考,具体如下: 效果图: Book.java文件: package com.book; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; public class Book extend

  • Android利用CountDownTimer实现验证码倒计时效果实例

    前言 等待总是让人感到焦急和厌烦的,特别是看不到进展的等待.所以为了不让用户痴痴地等,我们在进行某些耗时操作时,一般都要设计一个进度条或者倒计时器,让进度可视化,告诉用户"等待之后更精彩".在使用短信验证码注册或者登录App就可以看到这样的设计:点击"发送验证码"的按钮之后,按钮上就会出现倒计时(一般为60秒),倒计时结束之后,按钮的文字就会变成"重新发送". 在Android中要实现这样的效果可以使用Handler发送消息,但其实还有一个已经封

  • Android自定义view之3D正方体效果实例

    目录 前言 一.小提 二.将传感器改成事件分发机制 三.使用 四.源码 总结 前言 在之前写了一篇关于3D效果的文章,借助传感器展示,有小伙伴问可不可以改成手势滑动操作(事件分发),所以出一篇文章 传感器相关文章链接:Android 3D效果的实现 一.小提 相对于常见的自定义view而言,继承的GLSurfaceView只有两个构造函数.可以理解为没有提供获取自定义属性的方法. public TouchSurfaceView(Context context) { super(context);

  • android ViewPager实现滑动翻页效果实例代码

    实现ViewPager的滑动翻页效果可以使用ViewPager的setPageTransformer方法,如下: import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.View; public class ReadViewPager extends ViewPager { public ReadV

  • 详解Android中的沉浸式状态栏效果实例

    无意间了解到沉浸式状态栏,感觉贼拉的高大上,于是就是试着去了解一下,就有了这篇文章.下面就来了解一下啥叫沉浸式状态栏.传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别.这一样就在一定程度上牺牲了视觉宽度,界面面积变小. Google从android kitkat(Android 4.4)开始,给我们开发者提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7

  • 利用Android模仿微信摄像圆环进度效果实例

    前言 大家在平时的生活上遇到新奇的事情,都要立即打开微信视频录下来发给朋友看看.这个录制进度条看起来还不错哦,就仿着写了一个,不是样式完全的高仿,是功能的仿制.下面话不多说了,来一起看看详细的介绍吧. 微信效果: 源码下载: github代码直通车 本地下载 自制效果: 实现过程: 1.自定义圆半径和圆环颜色属性: <declare-styleable name="CiclePercentView"> <attr name="radius" for

  • Android自定义ScrollView实现放大回弹效果实例代码

    1,刚刚在别人开源的项目中看到了一个挺不错的用户体验,效果图如下: 2,那下面我们就来实现一下,首先看一下布局,由于一般只是我们包含头像的那部分方法,所以这里我们要把布局分成两部分,对应的布局文件效果图如下: 3,自定义ScrollView 第一步:创建一个类,继承自ScrollView,重写相应的构造函数 public class ZoomInScrollView extends ScrollView { public ZoomInScrollView(Context context) { t

随机推荐