Android高级UI_Path小试牛刀<二>

UiPath 编码工作流自动化完整指南--高级uipath工程师 《UiPath编码自动化完全指南》摘要:本文深入解析UiPath编码自动化的核心技术,涵盖C#代码编写、参数配置(Input/Output/In-Out)、四大输入方法(硬件事件/窗口消息/模拟/Chromium API)的对比与应用场景。重点强调"官方库优先"原则,详细展示Excel数据处理、UI元素操作和文件管理的标准化实现方案。提供核心API参考和最佳实践,包括UI自动化服务调用、元素定位、文件系统操作等实用代码示例,帮助开发者构建高效稳定的RPA流程。(149字) 阅读详情

上一篇讲了path的基本用法,这篇我们要去实现水波纹以及粘性小球
这里就不得不提到贝塞尔曲线

一阶贝塞尔曲线:

Android 提供方法:lineTo()

二阶贝塞尔曲线

二阶贝塞尔曲线有一个控制点 P1 和两个数据点 P0,P2。如下图:
二阶贝塞尔曲线

Android 提供方法:quadTo()
三阶贝塞尔曲线:
三阶贝塞尔曲线有两个控制点 P1,P2 和两个数据点 P0,P3。如下图:

三阶贝塞尔曲线

Android 提供方法:cubicTo()

二阶贝塞尔曲线实现如图效果

水波纹

实现思路:

  • 画出至少两段的波纹
  • 使用 ValueAnimator 不断获取平移的值 offset
  • 利用 offset 不断的改变波纹的位置
  • 画一个圆,取与波纹相交的部分

现在分步骤来说明:

1. 画出至少两段波纹我们首先要画出两段波纹。一段波纹就包含两条曲线。每条曲线我们可以使用 quadTo() 方法来画。

为了更容易理解,请看下图:

水波纹坐标图

mWL 是一段波纹的长度,mCenterY 是屏幕高度的一半。
画第一段波纹的第一条曲线:

mPath.moveTo(-mWL, mCenterY); //将path操作的起点移动到(-mWL,mCenterY)mPath.quadTo((-mWL * 3 / 4) , mCenterY + 60, (-mWL / 2), mCenterY); //画出第一段波纹的第一条曲线

画出第一段波纹的第二条曲线

mPath.quadTo((-mWL / 4) , mCenterY - 60, 0, mCenterY); //画出第一段波纹的第二条曲线

画出第二段波纹的第一条曲线:

mPath.quadTo((mWL /4) , mCenterY + 60, (mWL / 2), mCenterY); //画出第二段波纹的第一条曲线

画出第二段波纹的第二条曲线:

mPath.quadTo((mWL * 3/ 4) , mCenterY - 60, mWL, mCenterY); //画出第二段波纹的第二条曲线
  1. 使用 ValueAnimator 不断获取平移的值 offset
    那么现在来想一下应该怎么让这几段波纹动起来呢?我们需要一个 offset 的平移值。这个值应该加在每个点的x坐标上,并且 offset 是不断变化的,这样才会形成一个向右平移的效果。那怎么才能获取到这个变化的offset的值呢?答案就是要使用 ValueAnimator 。用法如下:
    private void initAnimator() {
        ValueAnimator animator = ValueAnimator.ofInt(0, mWL);
        animator.setRepeatCount(ValueAnimator.INFINITE);
        animator.setDuration(2000);
        animator.setInterpolator(new LinearInterpolator());
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                offset = (int) animation.getAnimatedValue();
                postInvalidate();
            }
        });
        animator.start();
    }

这样只要动画开始,offset 就会不断从 0~mWL 变化。
3. 利用offset不断的改变波纹的位置
现在为曲线的所有 X 坐标都加上 offset 值。这样就会产生平移的效果,为了简化代码,这里使用的 for 循环来画曲线。

        mPath.reset();
        mPath.moveTo(-mWL + offset, mCenterY);
        for (int i = 0; i < mWaveCount; i++) {
            mPath.quadTo((-mWL * 3 / 4) + (i * mWL) + offset, mCenterY + 60, (-mWL / 2) + (i * mWL) + offset, mCenterY);
            mPath.quadTo((-mWL / 4) + (i * mWL) + offset, mCenterY - 60, i * mWL + offset, mCenterY);
        }
        mPath.lineTo(mScreenWidth, mScreenHeight);
        mPath.lineTo(0, mScreenHeight);
        mPath.close();
        canvas.setDrawFilter(pfd);
        canvas.drawPath(mPath, mPaint);

现在,我们已经得到了波浪
微信截图_20170326154225.png
这里我们可以用mPath.op(mPath2, Path.Op.INTERSECT);
但是这样就最低版本只能支持api19,兼容性不好,所以我们要换个思维,使用canvas.clipPath(mPath, Region.Op.INTERSECT);

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //画圆
        canvas.drawCircle(mScreenWidth / 2, mCenterY, 300, mPaint2);

        mPath.reset();
        mPath.moveTo(-mWL + offset, mCenterY);
        for (int i = 0; i < mWaveCount; i++) {
            mPath.quadTo((-mWL * 3 / 4) + (i * mWL) + offset, mCenterY + 60, (-mWL / 2) + (i * mWL) + offset, mCenterY);
            mPath.quadTo((-mWL / 4) + (i * mWL) + offset, mCenterY - 60, i * mWL + offset, mCenterY);
        }
        mPath.lineTo(mScreenWidth, mScreenHeight);
        mPath.lineTo(0, mScreenHeight);
        mPath.close();

        mPath2.addCircle(mScreenWidth / 2, mCenterY, 300, Path.Direction.CCW);
        //api19以上才能用
//        mPath.op(mPath2, Path.Op.INTERSECT);
        //改用canvas.clipPath
        canvas.clipPath(mPath, Region.Op.INTERSECT);
        canvas.setDrawFilter(pfd);
        canvas.drawPath(mPath2, mPaint);

    }

成功画出
水波纹

三阶贝塞尔曲线的应用:

小水滴粘性.gif
贝塞尔曲线知识讲解
将这个圆的动画效果拆解开看的画,其实会分为5个状态。
pic1.png-2kB

状态1
pic2.png-2.4kB

状态2
pic3.png-2.6kB

状态3
pic4.png-2.4kB

状态4
pic1.png-2kB

状态5注:我这里的状态4和状态5其实与原设计图是有出入的,我这里的5个状态其实是对称关系的,但是原设计图并非是对称关系,然后因为我偷懒,就做成了对称设计,这个以后再优化吧~
也就是说,这个动画效果的实现就是不同状态之间的转化加上水平位移的实现,现在已经将动画肢解完了,那么接下来就讲解下如何实现圆的形变吧。
开始讲解具体内容之前我们需要先了解一下如何用贝塞尔曲线画一个圆,因为我的做法是通过贝塞尔曲线来实现的。
stackoverflow

上图是stackoverflow上的一个答案,这个答案可能说的不是很清楚,这里还有一篇文章,这两个的结果都是差不多,就是所需要的数值c约等于0.551915024494f,具体的论证过程可以看这两篇文章,那么这个c的值有什么用么,我用最简单的方法来说明,就是把图中的1理解为圆的半径,那么对应的另外个值就应该是半径乘以0.551915024494f。可能有朋友还是看不懂这个c到底干啥用呢,我下面画一个图来描述下,大概是怎么个意思。
jiangjietu.png-16.1kB

这里的坐标轴也就是Android中的坐标轴了,如果我们打算用贝塞尔曲线来画这么一个圆的话,我们需要知道这个圆的半径,以及图中的M的值,知道这两个值的话就能够知道图中12个点的坐标,知道坐标就能够用Path的cubicTo方法来使用贝塞尔曲线画出圆了。这里稍微展示点代码来说明如何绘制P0至P3这段圆弧。
mPath.moveTo(p0.x,p0.y);mPath.cubicTo(p1.x, p1.y, p2.x, p2.y, p3.x,p3.y);

这样我们就知道如何使用贝塞尔曲线来绘制一个圆了。也就是状态1和状态5我们都会绘制了,接下来看看状态2如何绘制。
jiangjietu2.png-108.1kB

通过上图大家就能很快的明白状态2应该如何绘制,其实就是把右边的点向右移动点距离就行了。其实photoshop(sketch)这些绘图软件中的钢笔工具(Vector)就是用的贝塞尔曲线,然后这里推荐个网址给大家,轻松上手钢笔工具的使用哦,强烈推荐!!!
看完上面的讲解,那么状态3也就一点都不难了。
jiangjietu3.png-111kB

看到上图就明白状态3的实现就是在状态2的基础上修改了个值,一个是M的值加大,让圆看起来跟肥一点,还有就是圈住的那些点向右移动,做到居中。
github代码下载
也欢迎关注我的简书和github主页

UiPath下载文件到本地.docx 立即下载

相关推荐

芯片设计中的setup和hold检查:为什么你的电路会跑飞?

本文深入解析了芯片设计中Setup与Hold检查的核心原理,它们是确保电路可靠运行的“黄金窗口”。通过剖析触发器物理本质、时序路径公式及检查方法,解释了Setup违例(数据太慢)和Hold违例(数据太快)如何导致电路“跑飞”,并提供了从RTL优化到物理实现的实战修复策略与协同优化技巧。

weixin_29268267的博客 475

Android高级UI开发(四十五)Canvas Path

1. Path概念 用Path定义一个图形,然后用canvas.drawPath(...)函数来绘制这个图形。例如绘制一个圆。Path可以绘制各种图形,如二次,三次贝塞尔曲线,圆形、多边形,三角形,五角星等几何形状。 public class PathOpView extends View { private Paint mPaint; public PathOpView(Context context) { super(context); mPai

gaoxiaoweiandy的专栏 2063

Ubuntu 22.04 安装 IsaacLab 2.1.0

本文介绍了IsaacLab的完整安装流程:1)创建Python3.10虚拟环境;2)安装PyTorch2.5.1(CUDA11.8);3)升级pip并安装IsaacSim4.5.0;4)克隆IsaacLab仓库;5)运行安装脚本(需接受EULA)。若遇cmake缺失错误,需执行sudo apt安装。安装完成后可通过Ant-v0训练任务验证,成功运行后将显示IsaacSim窗口和训练完成提示。注意:IsaacSim不同版本可共存于不同环境。

weixin_47880303的博客 2223

Android 绘图(三) Path

前面两篇文章Android 绘图(一) Paint  和 Android 绘图(二) Canvas  ,分别介绍了有关画笔和画布, 今天来看看另外一个和绘图有关的类-Path(路径)。       先看看官方文档对Path(路径)的描述: The Path class encapsulates compound (multiple contour) geometric paths consis

程序员七哥 1164

Flowable高级篇 -6.8.0 最全表结构说明-主要表结构字段注释

flowable 28张表 详细

billzhen的博客 1万+

设备管理器找不到蓝牙?从驱动到BIOS的系统排查指南

在Windows系统中,蓝牙功能依赖硬件、驱动、系统服务三层协同工作。设备管理器作为硬件状态的可视化窗口,当蓝牙设备消失时,往往意味着某一层链路中断。常见原因包括BIOS无线开关关闭、驱动异常、蓝牙支持服务被禁用,或系统文件损坏。排查思路应从基础概念出发,先理解蓝牙设备在设备管理器中的四种隐藏位置,再通过扫描硬件、检查BIOS、重装驱动、修复服务等步骤逐层定位。这一方法不仅适用于Windows电脑,也适用于HC-05、ESP32等嵌入式蓝牙模块,因为硬件、协议栈、应用层的故障逻辑相通。掌握这套技术价值在于减

weixin_33377602的博客 267

Path&PathMeasure完全解析

前言 Path扮演着路径的角色,在绘制View起着非常重要的位置,而PathMeasure是对Path进行测量,通过使用PathMeasure可以更加方便的使用Path工具。网上都好多关于这方面的文章,在这里只是做个笔录,不好不要见怪。嘿嘿 Part 1、谈谈Path的使用

花花young 4676

告别手动群发!用IDA Pro和CE搞定企业微信4.1.38.6011的HOOK开发(附完整代码)

本文详细介绍了如何利用IDA Pro和Cheat Engine进行企业微信4.1.38.6011的HOOK开发,实现自动化群发功能。从逆向工程环境配置、关键函数定位到HOOK框架设计,提供完整代码示例,帮助企业提升运营效率。

weixin_42533120的博客 478

Android开发之Path类使用详解,自绘各种各样的图形!

玩过自定义View的小伙伴都知道,在View的绘制过程中,有一个类叫做Path,Path可以帮助我们实现很多自定义形状的View,特别是配合xfermode属性来使用的时候。OK,那我们今天就来看看Path中那几个常用的API。1.moveTomoveTo表示将绘制点移动到某一个坐标处,该方法并不会进行绘制,主要是用来移动画笔。默认情况下起始坐标位于(0,0)点,我们可以手动调整默认位置。2....

weixin_30301449的博客 525

【AgentScope 2.0】01-不搭 demo,直接解剖一个生产级 Agent 平台:loser-agent 全链路地图

本文介绍生产级Agent平台loser-agent的完整请求旅程,从用户发消息到返回结果共七站:入口鉴权、灰度路由、Agent装配、模型路由、工具执行、持久化与流式响应。课程以真实源码为线索,深入剖析每一步实现逻辑,涵盖灰度发布、权限控制、HITL审批、多模态处理、状态持久化等核心能力。强调框架仅负责Agent运行时语义,平台自建管理请求生命周期中所有非框架部分,适合Java后端开发者系统掌握Agent工程化落地。

loser.with.m的博客 725

Mamba-UNet:用于医学图像分割的类似UNet的纯视觉Mamba网络

所提出的Mamba-UNet的架构如图2所示,其灵感来源于UNet [24] 和 Swin-UNet [3]。首先将大小为 H × W × 1 的2D灰度图像分割成类似于ViT和VMamba的块 [5,16],然后转换为维度为 H/4 × W/4 × 16 的1D序列。一个初始的线性嵌入层将特征维度调整为任意大小C。这些块令牌随后通过多个VSS块和块合并层进行处理,以创建分层特征。块合并层负责下采样和维度增加,而VSS块则专注于学习特征表示。

AI浩 7549

安卓-Android的Canvas用法-Canvas画图(2)

原帖跳转 玩过自定义View的小伙伴都知道,在View的绘制过程中,有一个类叫做Path,Path可以帮助我们实现很多自定义形状的View,特别是配合xfermode属性来使用的时候。OK,那我们今天就来看看Path中那几个常用的API。1.moveTomoveTo表示将绘制点移动到某一个坐标处,该方法并不会进行绘制,主要是用来移动画笔。默认情况下起始坐标位于(0,0)点,我们可以手动调整默认位置。2.lineTolineTo表示绘制一条直线,参数表...

ruiruiddd的博客 1095

SAP中关于预测需求的重要载体:计划独立需求

预测,就是为了调节客户需求的波动、不平衡,使企业的生产计划、物料计划尽量平稳、有序的必备工具。计划独立需求,Planned Independent Requirement(PIR)是SAP系统中最常见的预测需求。

saplakes的博客 1878

Android高级UI_Path小试牛刀<一>

我们知道Android中Canvas类对象可以进行绘制事物,里面有一个方法为canvas.drawPath方法,这个方法就是用来绘制我们的自定义Path对象。Path对象很有用,我们可以绘制一些特殊的动画效果,文字吸附效果等等。所以我们需要来学习下Path对象的使用。要想使用path做出漂亮的图片, 比如水波加载比如怎么使用path?以下是Path的基本操作的方法:第一类(直线与点的操作):lin

ApkCore的专栏 796

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

长沙红胖子Qt·西安(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

长沙红胖子 Qt・西安,本人拥有省级科研团队从业背景,研发团队产出所有项目、产品方案和研发无分包、无外包、无AI代笔,长期深耕双一流体系高精尖技术配套研发。博客主动剥离复杂底层工况机理,专注沉淀高端、特种行业领域Qt工程化落地实战经验。所有内容均为个人梳理总结的通用性工程方法论,只输出可公开的普适技术思路。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 164万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

什么是UI Path?

在了解UiPath之前, 我们首先应该了解RPA的概念. RPA(Robotic Process Automation)中文全称为机器人流程自动化, 以自动化软件作为虚拟劳动力,依据预先设定好的程序与现有系统进行交互,并完成预期的任务。 通过RPA软件编写的“机器人”程序, 可以捕捉并模拟我们日常的键盘、鼠标操作等人机交互行为,它们可以完成识别、触发、通信、文本生成等任务,自动执行重复性的业务流程。 RPA是目前最受欢迎的人工智能应用技术之一,因为它允许企业在原有业务系统之上进行业务流程自动化的部署,

_ 5774

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

UiPath学习(一)

UiPath学习初步了解UiPath背景UiPath背景开发环境准备软件下载和安装其他准备软件的基本使用技术涉及工作界面HelloWorld 初步了解UiPath背景 RPA应该是在2019年在国内开始火起来的一款应用型信息技术。我们公司也是顺应时代潮流尝试一下新技术,于是我开始了新技术的学习之旅。 UiPath背景 UiPath是一款RPA软件,RPA是Rebot Processer Autom...

woerry的专栏 3922

高级UI-Path和PathMeasure

Path是一个工具类,用来记录线条的轨迹路径,然后通过绘制轨迹路径,可以得到各种各样的图案,而PathMeasure是用来对Path进行测量的工具,再Path的运用中,运用最多的就是贝塞尔曲线,也是本文的重点 贝塞尔曲线 贝塞尔曲线就是这样的一条曲线,它是依据四个位置任意的点坐标绘制出的一条光滑曲线 线性公式 给定点P0、P1,线性贝兹曲线只是一条两...

weixin_30562507的博客 386

path2.0 UI path 2.0的华丽转身

path2.0惊艳了很多人吧。敢于拒绝google一亿美金的收购,果然有留一手:)   她的创始人Dave Morin说新版不久就已经超过150万人下载,而老版一年才突破了100万关口。用户一天内在新版分享的内容超过老版一年的内容。   path2.0之后带来的用户量和活跃用户的暴增最大的功臣莫过于界面设计和体验上的不俗表现: 1、产品定位的转变引发UI设计的调整   path

吾辈亦有感的专栏 2368

小白学 RPA(全球机器人流程自动化)----uipath的初接触

在智能化的今天,AI开始一鼎天下时,RPA(全球机器人流程自动化)开始展露头角,欲分天下而自制。 既然已经占领市场了,号称编程人员能在无编程基础的情况下做编程,当然经过接触后发现,这是个给不懂变成的人用uipath哇的一个坑。建议: 第一,建议有一定编程基础的人员去学UiPath。 第二,不要把一个项目定得太大,UiPath不稳定,跑的时间越长,卡死的机率越高。 第三,定义变量时,变量名称...

weixin_38610651的博客 6791

了解一下UiPath吗

什么是RPA?

宇 3万+

UiPath中文教程

在UiPath Studio中,活动(Activity)是流程自动化的基石,是构成自动化程序的最小模块。它们被包含在一个个NuGet包中。 我现在就教你我从RPA之家学到的知识 UiPath Studio中有3类包: 官方提供的包 来自社区的包 自定义的包 UiPath Studio自带了大量内置的核心活动,而这些内置活动仅仅包含了一些基本的操作元素。一些常见的操作,如处理PDF,Mail,Excel等都没有包含在核心活动里面。即使这些操作是官方提供的,你仍然需要通过Ma...

javagril的专栏 1万+

高级UI-Path贝塞尔曲线以及练习Demo 水波纹效果

贝塞尔曲线入门Demo demo 效果 二阶贝塞尔曲线demo 三阶贝塞尔曲线Demo 三阶贝塞尔曲线水波纹效果失败记录 二阶贝塞尔曲线波浪效果 一、Path基本使用 1、rLineTo,rMoveTo 带r开头 基于前一个点的相对位置 LineTo,MovoTo 不带r开头的,传的是我们的绝对位置 2、addCircle Path.Direction.CCW,点击进...

六道对穿肠的学习之旅 1283

android UI之Path

     Path作为UI绘制的重要的一个类,在官方文档上对于的介绍如下:     Path封装了由直线段,二次曲线和三次曲线组成的复合几何路径,它可以用canvas.drawPath()进行绘制,填充,描画,或者可以用于剪切或者绘制路径上的文字。    下面关于它常见的API进行一个简单的记录: 方法 讲解 lineTo(float x, float y) 绘制直线,连接上...

好久不见 849

【前沿技术RPA】 一文了解UiPath的项目活动设置

Activity项目设置使我们能够在项目级别更改Activity属性的默认值。本文专门针对RPA开发人员和解决方案架构师,介绍如何设置Activity属性的全局运行时和调试值。此外,还介绍了如何发布模板。

baidu_33146219的博客 1万+

自定义UiPath Activity实践

为了对UiPath Activity的实现方式一探究竟,自己尝试实践编写了一个简单的Activity,取名叫SelectRandomItem。 1. 开发环境准备: Microsoft Visual Studio with the .NET C# desktop development workload installed. NuG...

weixin_33985507的博客 2093
上一篇: Android高级UI_Path小试牛刀<一>
下一篇: Android高级UI_双缓冲策略解决GPU卡顿
ApkCore
博客等级 码龄12年 8粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值