Android 关于路径Path的那些效果

Android Path进阶之Path路径实现QQ拖拽气泡效果 先上效果图 先将这个过程分状态(阶段): 1.静止状态,小球的默认状态,由红色的气泡和中间的文本组成; 2.连接状态(拖拽半径短),拖拽过程中由随着手指一定的气泡和中间不断缩小的小气泡组成; 3.分离状态(拖拽半径长),中间的小气泡消失,连接的中间线也消失; 4.回弹或隐藏状态,当从连接状态松手,移动的气泡会回弹到中心,从分离状态松手,移动的气泡爆炸,... 阅读详情
主要内容:
1.path线段动画绘制出现(画图,画svg文字等)
2.path路径动画(对象沿着指定的路径进行运动)
3.获取path内的所有点(判断是否触摸在指定区域内)

一、path线段的动画绘制(也可以将SVG格式的文字转换为path之后实现写字效果)


先看网上盗的动态图(注意看里面的线段出现方式,感觉就像拿着笔依次绘制出来的感觉)
gif图太大传不上来,看 https://github.com/romainguy/road-trip里面的图就行

核心为使用 DashPathEffect绘制虚线

实现方式(举一个简单例子):
1.先使用Path绘制一个200*200矩形
Path path = new Path();
path.moveTo(0,0);
path.lineTo(200,0);
path.lineTo(200,200);
path.lineTo(0,200);
path.lineTo(0,0);

2.使用PathMeasure计算出整个Path的长度
PathMeasure pm = new PathMeasure();
float totalLen = pm.getLength();
3.开启一个线程动态增加已绘制出来的部分长度
timer = new Timer();
task = new TimerTask() {
@Override
public void run() {
percent += 0.04;
if (percent > 1) {
percent = 1;
}
handler.sendEmptyMessage(0);
}
};
timer.schedule(task, 0, 100);
float dis = totalLen * percent;
以上只是模拟的一种实现方式,大家也可以用其他方式实现(这部分主要是动画)
handler里面主要是调用了View的invalidate进行重绘

4.使用DashPathEffect绘制路径
PathEffect pe = new DashPathEffect(new float[]{d, len - d}, 0);
paint.setPathEffect(pe);
public DashPathEffect( float intervals[] , float phase);
inervals[] 中第一个值为显示长度,第二个值是间隔长度,第三个值为显示长度,第四个值是间隔长度,以此类推
phase据说是偏移量

这里的原理主要是将整个Path分成两部分,第一部分将需要绘制出来的部分作为显示长度,第二部分将还没有画出来的部分作为间隔长度,从而达到实现效果
canvas.drawPath(path,paint);


二、path路径动画



核心代码为:
float[] curPos = new float[2];
pm.getPosTan(dis,curPos,null);
dis参照以下 path线段的动画绘制 的第3点,主要是距离path起始点的距离

通过PathMeasure计算出路径Path上指定位置的点坐标
curPos[0] 为x坐标
curPos[1] 为y坐标

拿到这个点了,当然是想干什么干什么

三、获取path内的所有点,判断指定点是否在path内部


1.获取path的边界(即包含它的最小矩形)
RectF rf = new RectF();
path.computeBounds(rf,true);
2.得到Path内所有点的集合
Region region = new Region();
region.setPath(path,new Region((int)rf.left,(int)rf.top,(int)rf.right,(int)rf.bottom));
3.判断x,y是否在Path内
region.contains(x,y)

注意:以上方法有些边界部分包含不进去,因为RectF据说是一个左闭右开的集合

如果想要包含边界值:
for(int i = 0; i <= pm.getLength(); i ++){
float[] pos = new float[2];
pm.getPosTan(i,pos,null);
//添加到集合中去
}

安卓沿Path运动轨迹 当然是先看效果拉~中间那个圆圈,顺着圆圈的轨迹运动。 实现一个跟随Path路径运动的效果 思路 1.绘制一个路径 2.得到路径的每个点的坐标 3.用属性动画沿着路径点的坐标运动 实现 1.用 mPathMeasure = new PathMeasure(mPath,false); mPathMeasure.getPosTan(0, mCurrentPosition, n 阅读详情

相关推荐

深入探索Android画笔案例:Path类与自定义图形绘制

本文还有配套的精品资源,点击获取 简介:在Android开发中, Path 类是关键工具之一,用于创建和操作路径,包括线段和贝塞尔曲线。本文深入探讨了如何使用 Path 类绘制各种图形,并通过代码示例展示了其使用方法。介绍了如何通过 moveTo() , lineTo() , quadTo() , ...

weixin_35995661的博客 1167

android compose path 判断一个点是否在其范围内。

private fun GetPtInPath(tempx: Float, tempy: Float, path: Path): Boolean { val pathandroid:android.graphics.Path = path.asAndroidPath() val region = Region() var rectF:RectF = RectF() pathandroid.computeBounds(rectF,true) region.setPa

lph009的博客 220

Android图片折叠效果实现Demo源码解析与实战

在现代移动应用的UI设计中,动态视觉效果已成为提升用户体验的重要手段。其中,图片或视图的“折叠”动画以其拟物化、富有层次感的表现形式,在卡片展开、内容揭示等交互场景中广受青睐。要实现这种视觉上逼真的折叠效果,必须深入理解 Android 自定义 View 的绘制机制,并结合图形变换与图像处理技术进行精细化控制。本章将系统性地解析如何在 Android 平台通过继承View类并重写其核心方法,构建一个具备真实感折叠动画的自定义组件。实现折叠效果的关键在于对视图内容的空间分割和局部变形控制。

weixin_34718952的博客 641

android中判断一个点是否在一个封闭Path中

1.了解点是否在多边形内的计算方式 2.根据封闭path来取得多边形 3.计算点是否在多边形内

w_xue的专栏 2655

英飞凌AURIX 2G 系列MCU关于外设模块EVADC的实现原理及对应MCAL(EB Tresos)配置项详细讲解

本文章讲述了英飞凌AURIX 2G系列MCU关于外设模块EVADC的实现原理及对应MCAL配置工具(EB)的配置项。

weixin_46176506的博客 6279

AutoCAD提示找不到acdb24.dll、AcGe24.dll、AcPal.dll、AcUt.dll怎么办?

在我们安装了AutoCAD 2023版本以后,打开CAD,可能会出现dll文件丢失的情况,如下所示:1、由于找不到acdb24.dll,无法继续执行代码。重新安装程序可能解决此问题。2、由于找不到AcGe24.dll,无法继续执行代码。重新安装程序可能解决此问题。3、由于找不到AcPal.dll,无法继续执行代码。重新安装程序可能解决此问题。4、由于找不到AcUt.dll,无法继续执行代码。重新安装程序可能解决此问题。遇到AutoCAD启动系统错误,由于找不到dll文件该怎么处理呢?

huoxu369的博客 1万+

Android 判断一个点是否在封闭的Path内或不规则的图形内

最近在写画板程序,要判断一个点在一个闭合的path内或者是一个不规则的图形内,这个可不好解决网上查了一堆有算法云云的,直到看到一个大神的帖子 其实可以相当的简单几句话的是 核心代码: //------关键部分 判断点是否在 一个闭合的path内--------// if(event.getAction()==MotionEvent.ACTION_DOWN){

NN955的专栏 1万+

车载测试实战:adb logcat日志高效抓取与问题定位技巧

本文详细介绍了车载测试中adb logcat日志的高效抓取与问题定位技巧。作为车载测试的“第一现场”,adb logcat能实时、精准地抓取系统与应用日志,是定位应用崩溃、ANR及功能异常等问题的关键工具。文章从环境搭建、核心命令组合拳到实战分析与自动化脚本,提供了完整的操作指南,帮助测试人员快速掌握这一必备技能,大幅提升问题排查效率。

ii567的博客 1043

20 2D包围盒模块(box2d.rs)

【代码】20 2D包围盒模块(box2d.rs)

weixin_43219667的博客 286

避坑指南:RK3576+Android14适配移远5G模组(RG200U)时,我遇到的3个‘巨坑’及解决方案

本文详细记录了RK3576芯片适配Android14系统与移远RG200U 5G模组过程中遇到的三大技术难题:RIL服务启动失败、HIDL兼容性矩阵配置错误及ttyUSB权限冲突。通过实战案例提供了动态库拷贝、HIDL版本链声明和SELinux策略调整等解决方案,帮助开发者高效完成5G模组集成,特别适用于基于kernel6.1的嵌入式开发场景。

weixin_30664051的博客 391

从零开始学 PyTorch 7天路线图(完整可运行代码版)

本文提供了5天PyTorch入门教程的完整代码,涵盖从基础到实战的核心内容。Day1测试环境并介绍张量基础;Day2讲解常用张量操作;Day3演示自动求导机制;Day4实现完整线性回归模型;Day5构建MNIST手写数字识别全连接网络。所有代码可直接运行,包含GPU检测、梯度计算、模型训练和可视化等关键环节,帮助新手快速掌握PyTorch核心概念和典型应用场景。

IT老农民的博客 315

Android-高级-UI-进阶之路--(六)-PathMeasure-制作路径动画

通过上图我们先利用将 Path 起点设置为 (400,600) 开始绘制,最后调用了Path#close将为闭合的连接线闭合。我们就以 矩形,圆角矩形,椭圆,圆,圆弧 的顺序绘制//Path.Direction.CW/CCW 顺时针/逆时针//1. 添加矩形到 Path//2. 添加 圆角矩形到 Path//3. 添加 椭圆 到 Path//4. 添加 圆 到 Path//5. 添加 圆弧 到 Path ,直接添加一个圆弧到path中。

2401_84123188的博客 1229

全球气候模式降尺度方法总结及其代码实现

简介总结各类型气候模式降尺度方法

WW、forever的博客 1万+

android绘图Path类仿加速球水面波动效果

android提供的Path类,他可以预先在View上连成路径,然后调用Canvas的drawPath(path,paint),沿着路径画出来即可; 【1】画三角形// path.moveTo(100, 100); // path.lineTo(0, 200); // path.lineTo(200, 200); // path.close(

TaoLee 1931

【推荐100个unity插件之8】实现多人在线联机游戏——Mirror插件的使用介绍(附项目源码)

基于Mirror的Unity多人游戏开发指南 本文介绍了使用Mirror插件开发Unity多人游戏的基本流程。Mirror是Unity的高级网络API,替代了已废弃的UNet系统。文章详细讲解了如何导入Mirror插件,创建NetworkManager网络管理器,处理常见错误,以及创建玩家角色和出生点。 主要内容包括: 创建场景NetworkManager并配置必要组件 为玩家添加NetworkIdentity和NetworkTransform组件 设置玩家初始生成位置和生成方式 常见错误及解决方法 通过M

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android Path 使用

项目中经常会用到绘图方面的知识,之前一直对Path这个类的使用不是很清楚,现在系统的使用和总结一下。首先看一下API中的解释: The Path class encapsulates compound (multiple contour) geometric paths consisting of straight line segments, quadratic curves, and cub

GaoMatrix的专栏 9557

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

初学Android,图形图像之使用Path类

Path类可以预先在View上将N个点连成一条"路径",然后调用Canvas的drawPath(path,paint)即可沿着路径绘制图形 Android还为路径绘制提供了PathEffect来定义绘制效果,PathEffect包含如下子类 ComposePathEffect CornerPathEffect DashPathEffect DiscretePathEf

Nio96的专栏 809

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android绘制路径

package com.my.apitest; import android.os.Bundle; import android.util.Log; import android.view.View; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Contex

无心细语 1730

Android基础之Path类的使用

Android基础之Path类的使用我们知道Android中Canvas类对象可以进行绘制事物,里面有一个方法为canvas.drawPath方法,这个方法就是用来绘制我们的自定义Path对象。Path对象很有用,我们可以绘制一些特殊的动画效果,文字吸附效果等等。所以我们需要来学习下Path对象的使用。Path对象的方法一、构造函数1、无参构造函数/** * Create an empty

钝悟需要时间的打磨,顿悟需要时间的积累 9799

安卓路径写字动画

代码效果图 package fei.games.tv.test_justkey.view; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.gra...

a254837127的博客 719

android path 合并_Android path 路径相关

Path##Path 表示路径,可使用Canvas.drawPath方法将其绘制出来,Path不仅可以使用Paint的填充模式和描边模式,也可以用画布裁剪和或者画文字。Path 是Android中一种绘制工具,表示路径,可以画各种复杂的图形,如:曲线、轮廓等等;基本方法##**1. moveTo(x, y) ** : 移动到起点;** 2. lineTo(x, y) **: 绘制直线;3. ar...

weixin_39593427的博客 808

Android Paint绘制动态心电图效果

此前自定义View中用的比较多的是对view位置的控制和功能性的融合,视觉上和动画上的使用要少一些,因此最近心血来潮准备用原生的view绘制些动画效果出来。 自定义View的基础这里就不多阐述了,但还是大致说明一下。 首先,我们常见的View无非两种,一种是View(独立的控件,不能存在子控件),一种是ViewGroup(大多是充当容器的作用,可以包含子空间,例如:XXLayout)。但其实从本质上

落叶Ex的博客 6607

Android贝塞尔曲线实现水波纹的效果

前两天朋友找我实现一个水波纹的效果,因为这块一直没做过,所以花了一上午时间研究一下,参考了网上的一些方法,得知Android还有Path.quadTo()这么一个方法。 话不多说,代码如下: public class MyView extends View implements View.OnClickListener { private int mRippleWeight;//一

qq_28767927的博客 1977

绘图基础之Path类的应用

绘图基础之Path类的应用Path类可以预先在View上将N个点连成一条”路径”,然后调用Canvas的drawPath(path,paint)即可沿着路径绘制图形直接看代码 Activity代码package com.shake.pathtest;import android.content.Context; import android.content.pm.ActivityInfo; imp

234
下一篇: Android 理解PorterDuffXfermode叠加模式
fz_dev
博客等级 码龄10年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值