Android 动画(七)AnimatorSet组合动画

概述:

ValueAnimator和ObjectAnimator都是针对单个动画的,虽然可以用PropertyValuesHolder实现一个View的多种动画,但是没办法实现多个View同时动画。如果要对多个View做动画,并且单个View上存在多种动画效果,这时候就要用到AnimatorSet类了。AnimatorSet类用来实现复杂的组合动画,但功能上相比于AnimationSet强大多了。AnimatorSet针对ValueAnimator和ObjectAnimator都是适用的,但一般而言,基本不会用到ValueAnimator的组合动画。

一、AnimatorSet

在AnimatorSet中给为我们提供了两个方法playSequentially和playTogether,

  • playSequentially表示所有动画依次播放
  • playTogether表示所有动画一起开始

1.1 playSequentially

playSequentially的声明如下:

public void playSequentially(Animator... items);
public void playSequentially(List<Animator> items);

这里有两个声明方法,第一个是最常用的,它的参数是可变长参数,也就是说我们可以传进去任意多个Animator对象。这些对象的动画会逐个播放。
第二个构造方法,是传进去一个List< Animator>的列表。原理一样,也是逐个去取List中的动画对象,然后逐个播放。
下面代码演示使用第一种构造方法:

    /*** 设置多个View顺序播放动画**/private void startPlaySequentiallyAnim() {ObjectAnimator objectAnimator01 = ObjectAnimator.ofArgb(ivImage01, "BackgroundColor",getResources().getColor(R.color.colorPrimary),getResources().getColor(R.color.colorAccent),getResources().getColor(R.color.colorPrimary));ObjectAnimator objectAnimator02 = ObjectAnimator.ofFloat(ivImage01, "TranslationY", 0, 300, 0);ObjectAnimator objectAnimator03 = ObjectAnimator.ofFloat(ivImage02, "TranslationY", 0, 400, 0);ObjectAnimator objectAnimator04 = ObjectAnimator.ofFloat(ivImage03, "TranslationY", 0, 500, 0);ObjectAnimator objectAnimator05 = ObjectAnimator.ofFloat(ivImage04, "TranslationY", 0, 600, 0);AnimatorSet animatorSet=new AnimatorSet();animatorSet.playSequentially(objectAnimator01,objectAnimator02,objectAnimator03,objectAnimator04,objectAnimator05);animatorSet.setDuration(2000);animatorSet.start();}

效果如下:
这里写图片描述

1.2 playTogether

playTogether表示将所有动画一起播放
playTogether的声明如下:

public void playTogether(Animator... items);
public void playTogether(Collection<Animator> items);

有两个声明方法,区别只是传入的参数不一样
第一个是传可变长参数列表
第二个则是需要传一个组装好的Collection对象。
下面代码演示使用第一种构造方法:

    /*** 设置多个View一起播放动画*/private void startPlayTogetherAnim() {ObjectAnimator objectAnimator01 = ObjectAnimator.ofArgb(ivImage05, "BackgroundColor",getResources().getColor(R.color.colorPrimary),getResources().getColor(R.color.colorAccent),getResources().getColor(R.color.colorPrimary));ObjectAnimator objectAnimator02 = ObjectAnimator.ofFloat(ivImage05, "TranslationY", 0, 300, 0);ObjectAnimator objectAnimator03 = ObjectAnimator.ofFloat(ivImage06, "TranslationY", 0, 400, 0);ObjectAnimator objectAnimator04 = ObjectAnimator.ofFloat(ivImage07, "TranslationY", 0, 500, 0);ObjectAnimator objectAnimator05 = ObjectAnimator.ofFloat(ivImage08, "TranslationY", 0, 600, 0);AnimatorSet animatorSet = new AnimatorSet();animatorSet.playTogether(objectAnimator01, objectAnimator02, objectAnimator03, objectAnimator04, objectAnimator05);animatorSet.setDuration(2000);animatorSet.start();}

动画效果:

这里写图片描述

实现无限循环动画:

示例代码:

    /*** 设置多个View一起播放无限循环动画*/private AnimatorSet startInfiniteLoopAnim() {ObjectAnimator objectAnimator01 = ObjectAnimator.ofArgb(ivImage09, "BackgroundColor",getResources().getColor(R.color.colorPrimary),getResources().getColor(R.color.colorAccent),getResources().getColor(R.color.colorPrimary));objectAnimator01.setRepeatCount(ValueAnimator.INFINITE);ObjectAnimator objectAnimator02 = ObjectAnimator.ofFloat(ivImage09, "TranslationY", 0, 300, 0);objectAnimator02.setRepeatCount(ValueAnimator.INFINITE);ObjectAnimator objectAnimator03 = ObjectAnimator.ofFloat(ivImage10, "TranslationY", 0, 400, 0);objectAnimator03.setRepeatCount(ValueAnimator.INFINITE);ObjectAnimator objectAnimator04 = ObjectAnimator.ofFloat(ivImage11, "TranslationY", 0, 500, 0);objectAnimator04.setRepeatCount(ValueAnimator.INFINITE);ObjectAnimator objectAnimator05 = ObjectAnimator.ofFloat(ivImage12, "TranslationY", 0, 600, 0);objectAnimator05.setRepeatCount(ValueAnimator.INFINITE);AnimatorSet animatorSet = new AnimatorSet();animatorSet.playTogether(objectAnimator01, objectAnimator02, objectAnimator03, objectAnimator04, objectAnimator05);animatorSet.setDuration(2000);animatorSet.start();return animatorSet;}

动画效果:
这里写图片描述

playTogether和playSequentially在激活动画后,控件的动画情况与它们无关,它们只负责定时激活控件动画。
playSequentially只有上一个控件做完动画以后,才会激活下一个控件的动画,如果上一控件的动画是无限循环,那下一个控件就无法做动画了。

1.3 AnimatorSet.Builder(自由设置动画顺序)

AnimatorSet.Builder用于实现playTogether和playSequentially无法实现的效果,可以实现非常自由的组合动画,比如有三个动画A,B,C想先播放C然后同时播放A和B,利用playTogether和playSequentially是没办法实现的,但利用AnimatorSet.Builder却可以轻易实现。

1.3.1 AnimatorSet.Builder常用方法
方法概述
public Builder play(Animator anim)表示要播放哪个动画
AnimatorSet中的play方法是获取AnimatorSet.Builder对象的唯一途径
public Builder with(Animator anim)和前面动画一起执行
public Builder before(Animator anim)执行前面的动画后才执行该动画
public Builder after(Animator anim)执行先执行这个动画再执行前面动画
public Builder after(long delay)延迟n毫秒之后执行动画

play(Animator anim)表示当前在播放哪个动画,另外的with(Animator anim)、before(Animator anim)、after(Animator anim)都是以play中的当前所播放的动画为基准的。
当play(playAnim)与before(beforeAnim)共用,则表示在播放beforeAnim之前,先播放playAnim动画;同样,当play(playAnim)与after(afterAnim)共用时,则表示在在播放afterAnim动画之后,再播放playAnim动画。

示例代码:

    /*** 按照自定义顺序播放动画* 首先ivImage09的颜色变化、位移和ivImage09,同时发生* 等待前面的动画播放完后 ivImage11,ivImage12才开始动画**/private void startCustomOrderAnim() {ObjectAnimator objectAnimator01=ObjectAnimator.ofArgb(ivImage09, "BackgroundColor",getResources().getColor(R.color.colorPrimary),getResources().getColor(R.color.colorAccent),getResources().getColor(R.color.colorPrimary));ObjectAnimator objectAnimator02 = ObjectAnimator.ofFloat(ivImage09, "TranslationY", 0, 300, 0);ObjectAnimator objectAnimator03 = ObjectAnimator.ofFloat(ivImage10, "TranslationY", 0, 400, 0);ObjectAnimator objectAnimator04 = ObjectAnimator.ofFloat(ivImage11, "TranslationY", 0, 500, 0);ObjectAnimator objectAnimator05 = ObjectAnimator.ofFloat(ivImage12, "TranslationY", 0, 600, 0);AnimatorSet animatorSet = new AnimatorSet();animatorSet.play(objectAnimator01).with(objectAnimator02).with(objectAnimator03).before(objectAnimator04).before(objectAnimator05);animatorSet.setDuration(2000);animatorSet.start();}

动画效果:
这里写图片描述

1.4 AnimatorSet监听器

在AnimatorSet中也可以添加监听器,添加方法为:
public void addListener(AnimatorListener listener);

AnimatorSet的监听:

  • AnimatorSet的监听函数也只是用来监听AnimatorSet的状态的,与其中的动画无关;
  • AnimatorSet中没有设置循环的函数,所以AnimatorSet监听器中永远无法运行到onAnimationRepeat()中!
public static interface AnimatorListener {/*** 当AnimatorSet开始时调用*/void onAnimationStart(Animator animation);
/*** 当AnimatorSet结束时调用*/void onAnimationEnd(Animator animation);
/*** 当AnimatorSet被取消时调用*/void onAnimationCancel(Animator animation);
/*** 当AnimatorSet重复时调用,由于AnimatorSet没有设置repeat的函数,所以这个方法永远不会被调用*/void onAnimationRepeat(Animator animation);
}

1.5 AnimatorSet常用方法

方法概述
public AnimatorSet setDuration(long duration)设置单次动画时长
public void setInterpolator(TimeInterpolator interpolator)设置插值器
public void setTarget(Object target)设置ObjectAnimator动画目标控件
public void setStartDelay(long startDelay)设置AnimatorSet动画延迟激活时间

由于在ObjectAnimator中也存在以上方法,在AnimatorSet中设置以后,会覆盖单个ObjectAnimator中的设置;即如果AnimatorSet中没有设置,那么就以ObjectAnimator中的设置为准。如果AnimatorSet中设置以后,ObjectAnimator中的设置就会无效。例如:AnimatorSet.setTarget()的作用就是将动画的目标统一设置为当前控件,AnimatorSet中的所有动画都将作用在所设置的target控件上。但唯一的例外就是setStartDelay。
setStartDelay函数不会覆盖单个动画的延时,而且仅针对性的延长AnimatorSet的激活时间,单个动画的所设置的setStartDelay仍对单个动画起作用。

注意:

  1. AnimatorSet的延时是仅针对性的延长AnimatorSet激活时间的,对单个动画的延时设置没有影响。
  2. 在使用with的情况下,AnimatorSet的激活时间跟单个动画没有关系,激活后所有动画同时开始,包括延迟

下面两个例子可以好好体会下:

    /***  animatorSet 设置激活动画延时时长我们首先给animatorSet设置了2秒后开始激活动画,而objectAnimator02设置了2秒启动延时,objectAnimator03/04/05都没有设置延时所以objectAnimator02在animatorSet激活动画2秒后才会运动,objectAnimator03/04/05在animatorSet激活动画后,就会开始运动。*/private void startDelay01Anim() {ObjectAnimator objectAnimator02 = ObjectAnimator.ofFloat(ivImage09, "TranslationY", 0, 300, 0);objectAnimator02.setStartDelay(2000);ObjectAnimator objectAnimator03 = ObjectAnimator.ofFloat(ivImage10, "TranslationY", 0, 400, 0);ObjectAnimator objectAnimator04 = ObjectAnimator.ofFloat(ivImage11, "TranslationY", 0, 500, 0);ObjectAnimator objectAnimator05 = ObjectAnimator.ofFloat(ivImage12, "TranslationY", 0, 600, 0);AnimatorSet animatorSet = new AnimatorSet();animatorSet.play(objectAnimator02).with(objectAnimator03).with(objectAnimator04).with(objectAnimator05);animatorSet.setStartDelay(2000);animatorSet.setDuration(2000);animatorSet.start();}

这里写图片描述



   /***  animatorSet 设置激活动画延时时长我们首先给animatorSet设置了2秒后激活动画,而objectAnimator02没有设置启动延时,所以在animatorSet激活动画后objectAnimator02马上开始运动,而objectAnimator03/04/05都设置2秒启动延时,并跟随objectAnimator02一起运动,所以会在animatorSet激活动画并延时2秒后,才开始动画。*/private void startDelay02Anim() {ObjectAnimator objectAnimator02 = ObjectAnimator.ofFloat(ivImage09, "TranslationY", 0, 300, 0);ObjectAnimator objectAnimator03 = ObjectAnimator.ofFloat(ivImage10, "TranslationY", 0, 400, 0);objectAnimator03.setStartDelay(2000);ObjectAnimator objectAnimator04 = ObjectAnimator.ofFloat(ivImage11, "TranslationY", 0, 500, 0);objectAnimator04.setStartDelay(2000);ObjectAnimator objectAnimator05 = ObjectAnimator.ofFloat(ivImage12, "TranslationY", 0, 600, 0);objectAnimator05.setStartDelay(2000);AnimatorSet animatorSet = new AnimatorSet();animatorSet.play(objectAnimator02).with(objectAnimator03).with(objectAnimator04).with(objectAnimator05);animatorSet.setStartDelay(2000);animatorSet.setDuration(2000);animatorSet.start();}

这里写图片描述

二、AnimatorSet XML实现

2.1 xml标签与java类的对应关系

XML标签java类
<animator />ValueAnimator
<objectAnimator />ObjectAnimator
<set />AnimatorSet

2.2 animator字段详解

--
<animator/><animator
android:duration=”int”
ndroid:valueFrom=”float | int | color”
ndroid:valueTo=”float | int | color”
ndroid:startOffset=”int”
ndroid:repeatCount=”int”
ndroid:repeatMode=[“repeat” | “reverse”]
ndroid:valueType=[“intType” | “floatType”]
ndroid:interpolator=[“@android:anim/xxx”]/>
android:duration:每次动画播放的时长
android:valueFrom:初始动化值;取值范围为float,int和color,如果取值为float对应的值样式应该为89.0,取值为Int时,对应的值样式为:89;当取值为clolor时,对应的值样式为 #333333;
android:valueTo:动画结束值;取值范围同样是float,int和color这三种类型的值;
android:startOffset:动画激活延时;对应代码中的startDelay(long delay)函数;
android:repeatCount:动画重复次数
android:repeatMode:动画重复模式,取值为repeat和reverse;repeat表示正序重播,reverse表示倒序重播
android:valueType:表示参数值类型,取值为intType和floatType;与android:valueFrom、android:valueTo相对应。如果这里的取值为intType,那么android:valueFrom、android:valueTo的值也就要对应的是int类型的数值。如果这里的数值是floatType,那么android:valueFrom、android:valueTo的值也要对应的设置为float类型的值。
注意:如果android:valueFrom、android:valueTo的值设置为color类型的值,那么不需要设置这个参数;
android:interpolator:设置加速器/插值器;

示例代码:
animator/anim_animator.xml:

<?xml version="1.0" encoding="utf-8"?>
<animator xmlns:android="http://schemas.android.com/apk/res/android"android:duration="1000"android:valueType="floatType"android:valueFrom="0.1"android:valueTo="1.0"android:interpolator="@android:anim/bounce_interpolator">
</animator>
    /*** 使用AnimatorInflater.loadAnimator()加载xml中定义的ValueAnimator动画*/private void loadXmlAnimator(){ValueAnimator valueAnimator=(ValueAnimator) AnimatorInflater.loadAnimator(this,R.animator.anim_animator);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float value=(float)animation.getAnimatedValue();ivImage01.setScaleX(value);ivImage01.setScaleY(value);}});valueAnimator.start();}

动画效果:
这里写图片描述

2.3 objectAnimator字段详解

--
objectAnimator<objectAnimator
ndroid:propertyName=”string”
ndroid:duration=”int”
ndroid:valueFrom=”float | int |color”
ndroid:valueTo=”float | int | color”
ndroid:startOffset=”int”
ndroid:repeatCount=”int”
ndroid:repeatMode=[“repeat” | “reverse”]
ndroid:valueType=[“intType” | “floatType”]
ndroid:interpolator=[“@android:anim/xxx”]/>
android:propertyName:对应属性名,即ObjectAnimator所需要操作的属性名。
android:duration:每次动画播放的时长
android:valueFrom:初始动化值;取值范围为float,int和color;
android:valueTo:动画结束值;取值范围同样是float,int和color这三种类型的值;
android:startOffset:动画激活延时;对应代码中的startDelay(long delay)函数;
android:repeatCount:动画重复次数
android:repeatMode:动画重复模式,取值为repeat和reverse;repeat表示正序重播,reverse表示倒序重播
android:valueType:表示参数值类型,取值为intType和floatType;与android:valueFrom、android:valueTo相对应。如果这里的取值为intType,那么android:valueFrom、android:valueTo的值也就要对应的是int类型的数值。如果这里的数值是floatType,那么android:valueFrom、android:valueTo的值也要对应的设置为float类型的值。非常注意的是,如果android:valueFrom、android:valueTo的值设置为color类型的值,那么不需要设置这个参数;
android:interpolator:设置加速器;

示例代码01:
animator/anim_object_animator.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:duration="1500"android:propertyName="TranslationX"android:valueFrom="0"android:valueTo="400"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:repeatCount="1"android:repeatMode="reverse"android:startOffset="1000">
</objectAnimator>

java:

    /*** 使用AnimatorInflater.loadAnimator()加载xml中定义的ObjectAnimator动画*/private void loadXmlObjectAnimator(){ObjectAnimator objectAnimator=(ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.anim_object_animator);objectAnimator.setTarget(ivImage02);objectAnimator.start();}

动画效果:
这里写图片描述

示例代码02:
animator/anim_object_animator_color.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:duration="2000"android:propertyName="BackgroundColor"android:valueFrom="@color/colorAccent"android:valueTo="@color/colorPrimary"android:repeatCount="1"android:repeatMode="reverse"></objectAnimator>

java代码:

    /*** 使用AnimatorInflater.loadAnimator()加载xml中定义的ObjectAnimator color动画*/private void loadXmlObjectAnimatorColor(){ObjectAnimator objectAnimator=(ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.anim_object_animator_color);objectAnimator.setEvaluator(new ArgbEvaluator());objectAnimator.setTarget(ivImage02);objectAnimator.start();}

动画效果:
这里写图片描述

2.4 set字段详解

字段意义及使用方法

--
android:ordering[“together” |”sequentially”]
android:ordering:表示动画开始顺序。together表示同时开始动画,sequentially表示逐个开始动画;

示例代码:
animator/anim_animator_set.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:ordering="together"><objectAnimator android:duration="1500"android:propertyName="TranslationX"android:valueFrom="0"android:valueTo="400"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:repeatCount="1"android:repeatMode="reverse"android:startOffset="1000"/><objectAnimator android:duration="2000"android:propertyName="BackgroundColor"android:valueFrom="@color/colorAccent"android:valueTo="@color/colorPrimary"android:repeatCount="1"android:repeatMode="reverse"android:valueType="colorType"/></set>

java代码:

    /*** 使用AnimatorInflater.loadAnimator()加载xml中定义的AnimatorSet动画*/private void loadXmlAnimatorSet(){AnimatorSet animatorSet=(AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.anim_animator_set);animatorSet.setTarget(ivImage02);animatorSet.start();}

动画效果:
这里写图片描述




到此Android的动画部分,就学习完结了,总共7篇,由浅至深的学习了android的动画部分,当然了只是一些基础部分,剩下还要在实战中继续提高。(PS:虽然动画部分上个月就学习完了,但由于时间紧张,工作也比较忙,间隔一个月后才陆陆续续的总结完毕。),后续也会在博客中放一些动画例子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24529.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python做动画视频教程-如何入门

Python做动画视频教程-如何入门 Python是一种非常强大的编程语言&#xff0c;它可以用于很多领域&#xff0c;比如数据科学、机器学习和计算机视觉等。但是你曾想过用Python来制作动画视频吗&#xff1f;这不仅可以增强你的编程技能&#xff0c;而且还可以让你的创意更加丰富。…

chatgpt赋能python:Python做动画需要学习哪些东西?

Python做动画需要学习哪些东西&#xff1f; Python是一种高级编程语言&#xff0c;具有易读易学的特点&#xff0c;因此被广泛应用于图形设计、动画、游戏和科学计算等领域。Python使动画制作变得更加简单和快速&#xff0c;并且允许用户在更广泛的平台上实现创意想法。 在本…

chatgpt赋能python:Python做动画演示

Python做动画演示 Python是一种脚本语言&#xff0c;适用于广泛的应用&#xff0c;例如数据分析和机器学习。但是&#xff0c;Python也可以用于创建动画演示。本文将介绍Python如何用于制作动画演示&#xff0c;并提供一些最佳实践来帮助您获得最佳效果。 起步 首先&#xf…

不会做动画的程序猿不是好的动画师(如何用css3动画做动画)

“看清animation&#xff0c;transform&#xff0c; keyframes&#xff0c;transition这四个的脸&#xff0c;以后这四个来了就是要做动画了&#xff0c;看好你们的网页&#xff0c;除了这四个&#xff0c;谁管你们都不好使。” 一.transition&#xff08;过渡&#xff09;&…

[一起来做动图吧]Animate制作简单动图,包教包会,不会举报

这个是目录 首先&#xff0c;认识一下An吧①区&#xff0c;我不怎么用但其实很重要②区&#xff0c;要和④区混合食用选择&#xff0c;自由变形&#xff0c;套索工具绘图工具&#xff08;以线条为例&#xff09;填充和笔触&#xff1a;对象绘制模式&#xff1a;笔触、样式和宽度…

chatgpt赋能python:用Python来制作动画

用Python来制作动画 Python是一种高级编程语言&#xff0c;可以用于许多任务&#xff0c;包括数据分析、网络编程&#xff0c;甚至是制作动画。在这篇文章中&#xff0c;我们将讨论如何使用Python来制作动画。 Python中的动画库 Python中有许多用于制作动画的库。其中最流行…

ping命令 网络抓包 分析

首先&#xff0c;执行ipconfig确认自己电脑的ip地址 可以得到我的电脑的ip地址为192.168.43.15&#xff0c;网关地址为192.168.43.1 打开wireshark抓包工具&#xff0c;ping网关&#xff0c;看看会发生什么 命令行中&#xff0c;我们发送了4个具有32B的数据&#xff0c;从抓…

网络抓包-抓包工具tcpdump的使用与数据分析

1.测试背景 本次测试选用两台不同的服务器&#xff0c;ip分别为.233和.246,233服务器为客户端&#xff0c;246服务器为服务端。利用tcp协议就行socket通信。socket网络编程部分示例代码为基本的通信代码&#xff0c;需要了解tcp网络通讯的基本协议与过程。服务器上采用tcpdump…

通过抓包研究TCP的连接、传输、断开

1-建立连接TCP三次握手 建立一个 TCP 连接需要“三次握手”&#xff0c;缺一不可 &#xff1a; 一次握手:客户端发送带有 SYN&#xff08;SEQx&#xff09; 标志的数据包 -> 服务端&#xff0c;然后客户端进入 SYN_SEND 状态&#xff0c;等待服务器的确认&#xff1b;二次握…

Winpcap进行抓包,分析数据包结构并统计IP流量

2020年华科计算机网络实验 文末有完整代码&#xff0c;仅限参考 一.实验目的 随着计算机网络技术的飞速发展&#xff0c;网络为社会经济做出越来越多的贡献&#xff0c;可以说计算机网络的发展已经成为现代社会进步的一个重要标志。但同时&#xff0c;计算机犯罪、黑客攻击、…

HttpCanary抓包断网问题解决方式

以上操作步骤完成&#xff0c;即可完成抓包操作

原生JS实现代码高亮功能

实现步骤 分析如何实现该功能了解词法结构Javascript的产生式少废话&#xff0c;上代码 分析如何实现该功能 平时我们在使用一些代码编辑器或者Markdown时很好奇它的代码高亮是如何 实现的。其实原理也挺简单的,就是区分代码内容的不同token并加以颜色标识。 我们将以js规则为例…

从六个维度来分析:代码、无代码、低代码、AI提示代码、AI低代码

IT行业最不缺少概念&#xff0c;再多几个也无妨&#xff0c;反正大部分的概念大部分人都不会真正弄懂。AI低代码是我们新创的&#xff0c;AIGC低代码、AI低代码、智能开发、AI生成式开发、AIGS(AI生成软件)等等&#xff0c;这些概念已经呼之欲出了&#xff0c;不过还是觉得AI低…

Transformer:一种图灵完备的神经网络

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【Transformer】微信技术交流群 作者&#xff1a;张晨珩&#xff08;北京大学23级博士生&#xff09;已授权 https://zhuanlan.zhihu.com/p/611257510 论文: Attention is Tu…

什么是元宇宙?元宇宙在 2023 年将走向何方

2023 年&#xff0c;元宇宙是当今技术领域的热门话题。除了新兴的人工智能和物联网技术&#xff0c;元宇宙服务提供商也在争先恐后地进行创新&#xff0c;以提供企业和消费者解决方案。 元宇宙曾经是技术先驱和数据科学家的专属&#xff0c;现在正在扩大到影响每个人。这种环…

Midjourney|文心一格prompt教程[技巧篇]:生成多样性、增加艺术风格、图片二次修改、渐进优化、权重、灯光设置等17个技巧等你来学

Midjourney|文心一格prompt教程[技巧篇]&#xff1a;生成多样性、增加艺术风格、图片二次修改、渐进优化、权重、灯光设置等17个技巧等你来学 1.技巧一&#xff1a;临摹 我认为学习图片类的 prompt&#xff0c;跟学习画画是类似的&#xff0c;最好的学习方法不是直接用模板。…

新旧iphone短信转移,苹果旧手机短信导入新手机

短信携带重要信息内容&#xff0c;新旧iphone短信转移&#xff1f;您可能知道&#xff0c;iOS设备上不支持导出iPhone简讯&#xff0c;更不用说打印iPhone上的短信了。幸运的是&#xff0c;有一些可行的方法可以将iPhone短信导入到另一个iPhone&#xff0c;继续阅读以获得更多帮…

苹果手机怎么发语音短信?

说到语音&#xff0c;大家最熟悉的就是用微信发语音了&#xff0c;但是微信发语音的前提是必须是好友&#xff0c; 对于企业来说&#xff0c;使用范围还是受限&#xff0c;其实比微信语音应用范围广的就是语音短信&#xff0c;通过语音通知的新式&#xff0c;只要用户手机能正常…

iPhone苹果手机短信如何批量删除苹果iPhone手机短信?

iPhone苹果手机短信如何批量删除苹果iPhone手机短信&#xff1f; 1、iPhone苹果手机短信较多&#xff0c;如何才能快捷的批量删除苹果iPhone手机短信。 2、打开苹果iPhone手机设置&#xff1b; 3、在iPhone苹果手机设置内找到通用并点击进入&#xff1b; 4、在苹果iPhone手机设…

苹果手机短信如何转入Android手机,苹果手机怎么将短信备份导入到安卓手机?...

iPhone手机的短信无法直接导入安卓手机&#xff0c;在将苹果手机换为安卓手机时&#xff0c;短信往往无法迁移&#xff0c;这让我们很苦恼。小编试了QQ同步助手&#xff0c;百度网盘等同步类软件&#xff0c;往往只能备份通讯录&#xff0c;而无法备份短信。本文将介绍怎么样通…