Animation and Graphics partⅡ Property Animation

基于Java17、SpringBoot、vue3、antdv-next、uniapp等主流技术构建的全场景极速开发平台 MDP内置3个web端、1个移动端 重点解决用户中心、开发者平台、管理后台3个应 MDP-主数据平台,后端项目。专注于单点登录解决方案。内置用户中心、开发者平台、管理后台3个应用。包含:单点登录、Oauth2 登录、用户身份管理、应用申请、应用接入、主数据维护、主数据订阅、主数据广播、应用接口调用、接口管理管理和查看、系统配置等功能。 立即下载

本文是对Android动画API的官方资料的翻译。

原文连接:https://developer.android.com/guide/topics/graphics/prop-animation.html

以下正文开始:

属性动画

属性动画系统是一个强大的框架,几乎可以使任何对象产生动画。你可以随着时间改变任意的对象属性来定义动画效果,不管该属性是否显示在屏幕上。属性动画在指定的时间长度改变属性值。为了形成动画,你需要指定想要 变化的属性,比如对象在屏幕上的位置, 动画效果持续多久,还有 属性值的变化范围。

属性动画系统可以定义动画的以下属性:
  • 持续时间(Duration):动画时长,默认为300 ms。
  • 时间插值(Time interpolation):属性值随时间的函数变化关系。
  • 重复计数与模式(Repeat count and behavior):可以指定当动画结束时是否需要重复动画以及重复次数;也可以指定动画逆向进行,也可以设置正向逆向重复直到达到重复次数。
  • 动画集合(AnimationSet):你可以定义一组动画集合,同时执行或者顺序执行。
  • 帧刷新延迟(Frame refresh delay):定义多久刷新一次动画帧。默认值每10ms刷新一次,但是刷新的速度最终取决于系统繁忙与否以及底层定时器的的速度。

属性动画如何工作

首先,我们用一个简单的例子来解释动画如何工作。图1所示,假设一个对象选取代表屏幕上水平位置的 X 属性作为动画属性,动画持续时间设为40 ms,运行距离为40 px。每过10 ms(Frame refresh delay 默认值),对象水平移动10 px。在40 ms结束的时候,对象在水平位置40,动画结束。这是一个线性插值的动画例子,也就是对象以恒定的速度移动。

图1 线性动画例子
你也可以指定非线性动画。图2表示一个假设的对象在动画开始的时候加速,在结束的时候减速。该对象仍然在40ms内移动40px,但是非线性的移动。一开始,动画加速到中点然后减速知道结束。如图2所示,开始和结束的阶段的运行距离小于中间的距离。

图2 非线性动画例子
我们仔细探究如上所述的属性动画计算动画的重要因素,图3表示主要classes之间相互工作原理。

图3 动画如何计算
ValueAnimator类记录动画定时,比如动画运行了多长时间以及属性当前值。

ValueAnimator类封装了一个接口TimeInterpolator,用来定义动画插值,还有一个接口TypeEvaluator,用来定义如何计算属性值。比如图2,使用的TimeInterpolar是AccelerateDecelerateInterpolar, TypeEvaluator是IntEvaluator。

要开始动画,先创建ValueAnimation对象,并给你要给产生动画的属性赋于在动画区间的初始值和结束值。当调用start()函数,动画开始。整个动画期间,ValueAnimator计算时间分数( elapsed fraction,介于0,1之间),该分数基于动画持续时间和已经过去的时间,也就是完成动画的百分比,0即0%,1即100%。例如在图1中 t = 10 ms时,时间分时为 .25,因为持续时间为40ms。

当ValueAnimator完成时间分数的计算时,会调用TimeInterpolar来计算内插部分( interpolated fraction)。将设定的时间插值考虑进来,内插部分和时间分数有一定的映射关系。例如,图2中动画缓慢加速,在 t = 10 ms时,内插分数为 0.15,小于时间分数0.25,而在图1中内插分数和时间分数始终保持一致。

属性动画与视图动画的区别

视图动画系统只能使视图对象产生动画,所以如果你要非视图对象产生动画,需要用自己的代码来实现。视图动画系统还受限于只能操作视图对象一小部分,比如视图的缩放与旋转,但是不能操作背景颜色。

视图动画的另一个缺点就是只能改变视图绘制的位置,而不是改变视图本身。比如说,你使一个按钮Button移动,button正确绘制,但是按钮可点击的实际位置不变,所以要实现自己的逻辑来控制。

对于属性动画,这些限制都不存在了,并且可以对任何对象的任何属性做成动画效果(包括视图和非视图),并且是改变对象本身。实现动画的方式上,属性动画更加强大。在高版本中,你可以给要操作的属性分配animators,比如color、position、size。并且可以定义动画的一些方面如插值以及animators同步。

然而,视图动画设置省时,代码简单。如果视图动画可以完成你的需求或者现有代码已经按照想要的方式运行,那就无需属性动画了。在不同的情况下使用两种动画系统也是可行的。

API 概览

你可以在 andorid.animation 找到大多数属性动画API。因为视图动画已经定义了很多插值函数(见 android.view.animation),可以在属性动画中使用这些插值函数。下面几张表描述了属性动画的主要组成。

Animator 类提供了创建动画的基础架构,一般不需要直接使用该类,因为它仅提供最小功能模块,需要被继承来完全支持动画值。继承自Animator的子类有:
表一 Animator
Class描述
  ValueAnimator属性动画主要的定时机制,同时计算属性。该类包含所有核心功能,并包含计算动画值、每个动画的定时细节、是否重复的信息、接受更新事件的监听器、设置自定义类型。产生动画分为两部分:计算动画值 和 将值赋予对象属性。ValueAnimator并不实现第二部分,所以你必须监听ValueAnimator计算得到的值,然后通过自己的逻辑来实现动画。查看更多信息见Animating with ValueAnimator。
ObjectAnimator ValueAnimator的子类,可以设定目标对象及目标属性。当该类计算好动画的新值时,相应地更新属性值。因为ObjectAnimator更新目标对象的属性动画值更加简单,所以大多数时候要使用该类。然而有时候需要直接使用ValueAnimator,因为ObjectAnimator有更多的限制,比如目标对象上需要特定的访问器方法。
AnimatorSet提供动画分组机制,这样它们之间可以以某种关系运行。你可以指定这些动画同时运行,顺序执行,或者以一定的延迟来执行。常看更多信息见Choreographing multiple animations with AnimationSets

Evaluators 阐述了属性动画系统如何给给定的属性计算值。它们拿到Animator类得到的时序数据(动画的初始值和结束值)并且基于该数据计算动画下的属性值。属性动画系统包含以下evaluators:
表2 Evaluators
Class/InterfaceDescription
IntEvaluators计算int 属性值的默认evaluator
FloatEvaluation计算float属性值的默认evaluator
ArgbEvaluation计算颜色属性的默认evaluator(十六进制)
TypeEvaluator创建自定义evaluator的接口。如果要产生动画的属性既不是int,float或者color,你必须实现TypeEvaluator接口来指定如何计算对象属性的动画值。如果你想改变int,float,color这些类型的默认行为,也可以给指定自定义的TypeEvaluator。查看更多信息写自定义详见-->Using a TypeEvaluator

Interpolator:时间插值器指定动画值作为时间的函数。举个例子,你可以指定整个动画过程以线性执行,意味着整个时间段动画均匀的移动;也可以指定非线性时间。表3描述的interpolator包含在---> android.view.animation.如果下面的interpolator均不能满足要求,实现TimeInterpolar接口并实现自己的。自定义interpolator更多信息---> Using interpolator
表3 Interpolators
Class/InterfaceDescription
AccelerateDecelerateInterpolatorInterpolator:开始和结束的时候变化很慢,但中间会加速
AccelerateInterpolator Interpolator:开始很慢,然后不断加速
AnticipateInterpolatorInterpolator:whose change starts backward then flings forward(大意是,开始向后再向前)
AnticipateOvershootInterpolatorInterpolator:开始向后再向前,但是超过目标值,再回退到final value
BounceInterpolatorInterpolator:动画结束时候有反弹
CycleInterpolatorInterpolator:动画以指定的循环数循环
DecelerateInterpolatorInterpolator:开始很快,然后开始减速
LinearInterpolatorInterpolator:匀速改变
OvershootInterpolatorInterpolator:向前甩,超过最终值后再返回
TimeInterpolar接口:可以实现自己的Interpolator

ValueAnimator 实现动画

通过指定一系列int,float,或者color值,ValueAnimator类可以将其产生动画。你可以通过ValueAnimator的构造方法来获得一个ValueAnimator,构造方法有ofInt(), ofFloat(), ofObject()。举个例子:
ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.start();
在上述代码中,ValueAnimator开始在0和1之间计算动画值,持续时间1000 ms,调用start() 方法开始执行。

你也可以指定自定义类型,如下:
ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
animation.setDuration(1000);
animation.start();
在上述代码中,ValueAnimator利用MyTypeEvaluator中实现的逻辑计算startPropertyValue到endPropertyValue之间的动画值。持续时间1000 ms,调用start() 方法开始执行。

之前的代码段并没有对对象有真正的影响,因为ValueAnimator并没有直接操作对象及属性。但是你最想做的是利用计算出来的数据来改变对象,产生动画。你可以在ValueAnimator中定义一个监听器来处理动画生命周期中的重要事件,比如框架的更新(Frame updates)。当实现监听器后,你可以通过调用getAnimatedValue() 方法来获取指定框架刷新需要的计算值。listener的更多信息,详见---> Animation Listener

ObjectAnimator实现动画

前面章节已经提过,ObjectAnimator是ValueAnimator的子类,结合了时序机制和ValueAnimator的值计算。这使得对象产生动画更加简单,你不再需要实现ValueAnimator.AnimatorUpdateListener,因为可以实现属性的自动更新。

实例化ObjectAnimator对象和ValueAnimator类似,但是你也可以指定对象以及对象的属性(以String的形式),以及动画值的区间。
ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
anim.setDuration(1000);
anim.start();
为了使ObjectAnimator正确的更新属性,需要做以下几项:
  • 对象属性必须有个setter函数,形式为set<属性名>()。因为ObjectAnimator自动更新属性,所以必须能通过setter方法来获取属性。比如,属性名为 foo,你需要一个setFoo()方法。如果setter方法不存在,你有三种选择:
    • 如果可以,加setter方法;
    • 使用一个你能更改的封装类,这个封装类通过一个有效的setter方法接收值然后转寄给原始对象。
    • 使用ValueAnimator代替
  • 如果你在ObjectAnimator工厂方法中为values...仅指定一个值,那么把其假定为ending value。所以你要操作的对象属性要有一个getter()方法来获取动画的初始值。getter()方法的形式必须是get<属性名>(),比如属性名是 foo,需要一个getFoo()方法。
  • 属性的getter(如果需要)和setter方法必须操作同一类型(即为ObjectAnimator指定的初始值和结束值),举个例子,你必须用targetObject.setPropName(float)和targetObject.getPropName(float),当你使用了下述构造方法:
    ObjectAnimator.ofFloat(targetObject, "propName", 1f)

  • 根据产生动画的对象或属性,你有可能(might)需要调用View的invalidate()方法来强制屏幕以更新后的属性值来重绘。你要在onAnimationUpdate()回调中完成。例如,让一个Drawable对象的color属性产生动画,只有在重绘的时候才能在屏幕上更新。所有关于View的属性setters,比如setAlpha()和setTranslationX(),invalidate the View properly,所以在调用这些方法赋予新值时无需再invalidate the View。

利用Animation创建多动画

很多情况下,你想播放一个动画取决于另一动画的开始或者结束。Android系统允许你将动画捆绑一起到AnimationSet,所以你可以指定是否要同时、顺序、以特定延迟来执行动画,你也可以相互嵌套AnimationSet。

下面的简单代码取自 Bouncing Balls,以如下顺序执行Animator对象:
1. 播放 bounceAnim;
2. 同时播放 squashAnim1,squashAnim2,stretchAnim1,stretchAnim2;
3. 播放 bounceBackAnim;
4. 播放 fadeAnim。

AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).before(squashAnim1);
bouncer.play(squashAnim1).with(squashAnim2);
bouncer.play(squashAnim1).with(stretchAnim1);
bouncer.play(squashAnim1).with(stretchAnim2);
bouncer.play(bounceBackAnim).after(stretchAnim2);
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();

Animation 监听器

你可以使用下列监听器来监听动画持续时间内的重要事件:
如果不想实现Animator.AnimatorListener接口中的所有方法,你可以继承AnimatorListenerAdapter类,而不是实现Animator.AnimatorListener接口。AnimatorListenerAdapter类这些方法空的实现,可以选择需要的进行复写。
举个例子,Bouncing Balls 例子仅仅为onAnimationEnd() 回调创建了AnimatorListenerAdapter:
ValueAnimatorAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
fadeAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
    balls.remove(((ObjectAnimator)animation).getTarget());
}

Animating Layout Changes to ViewGroups

属性动画可以animate changes to ViewGroup objects ,也提供了简单的方法使View对象产生动画。

你可以通过LayoutTransition类来使ViewGroup里布局变化(layout changes)产生动画,当调用View的setVisiblity()方法(VISIBLE或者GONE)来设置ViewGroup 中的View添加到或者移除时,View经历出现和消失的动画。ViewGroup中剩下的Views也可以以动画的形式变到新的位置上。你可以在LayoutTransition对象中通过调用setAnimator()来定义以下动画,并且传递一个Animator对象,同时携带下面LayoutTransition常量之一:
  • APPEARING - 条目加入到容器中动画标志位
  • CHANGE_APPEARING - 由于新条目加入,其他条目移动动画的标志位
  • DISAPPEARING - 条目从容器中移除时的动画标志位
  • CHANGE_DISAPPEARING - 由于条目移出,其他条目移动的动画标志位
你可以为上面四种事件定义自己的动画来自定义实现布局转换,或者使用默认动画效果。

LayoutTransition例子展示了如何为布局转换定义动画,然后然后将动画效果设定在想产生动画的View对象。

LayoutAnimationByDefault和它对应的布局文件layout_animations_by_default.xml如何在XML中使用默认的布局转换动画。只需要为ViewGroup设定android: animationLayoutchanges 属性为true即可。例如:
<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@+id/verticalContainer"
    android:animateLayoutChanges="true" />
将此属性设定为true,自动地加入Views加入或移除的动画,以及ViewGroup中剩余Views的动画效果。

使用TypeEvaluator

如果你要对Android系统不”能识别“的类型产生动画,你可以通过实现TypeEvaluator接口来实现自己的evaluator。Android”能识别“的类型有int、float和color,分别对应IntEvaluator,FloatEvaluator和ArgbEvaluator三种类型的evaluator。

TypeEvaluator接口只需实现一个方法,evaluate()。这个方法允许你使用的Animator为你的动画属性返回合适的值。FloatEvaluator类说明了如何使用:
public class FloatEvaluator implements TypeEvaluator {

    public Object evaluate(float fraction, Object startValue, Object endValue) {
        float startFloat = ((Number) startValue).floatValue();
        return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
    }
}
注意:当ValueAnimator或者ObjectAnimator运行时,它计算动画当前播放的部分比(介于0,1之间),然后根据使用的Interpolator来计算插值,插值分数是你的TypeEvaluator接受到的fraction参数。所以计算动画值时你不必考虑Interpolator。

使用Interpolator

Interpolator定义了特定值与时间的函数关系。比如你可以指定整个动画线性执行,也就是整个动画阶段动画均匀移动;或者指定动画非线性执行,比如使用加速或者减速在动画的开始或者结尾。

Interpolators从Animator中接收一个代表动画执行过的时间分数,Interpolators改变这个分数来配合动画类型。Android在android.view.animation package中提供了一系列常见的Interpolators。如果没有动画满足需求,可以实现TimeInterpolator接口来自定义。

举例说明,对比默认Interpolators中的AccelerateDecelerateInterpolator和LinearInterpolator计算插值的不同。LinearInterpolator不影响输入的时间分数,AccelerateDecelerateInterpolator使进入时加速,出去时减速。下述方法定义了这些Interpolator的逻辑:
AccelerateDecelerateInterpolator:
public float getInterpolation(float input) {
    return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}
LinearInterpolator:
public float getInterpolation(float input) {
    return input;
}
下表代表1000ms动画中interpolators计算的近似值:
ms elapsedElspased fraction/ Interpolated fraction(Linear)Interpolated fraction(Accelerate / Decelerate)
000
200.2.1
400.4.345
600,6.8
800.8.9
100011
由表所示,LinearInterpolator以每200ms 变化.2的速度匀速执行,AccelerateDecelerateInterpolator在200ms到600ms比LinearInterpolator快,600ms到1000ms比较慢。

指定关键帧(KeyFrames)

关键帧对象包含一个时间/值 对,使你可以定义特定时间的动画的特定状态。每个keyframe也可以有自己的Interpolator,来控制前一个关键帧到该关键帧的动画行为。

实例化一个keyframe对象,必须使用下列工厂方法之一:ofInt(), ofFloat(), or ofObject()来获取合适类型的的keyframe。然后调用ofKeyframe()工厂方法来获取一个PropertyValuesHolder对象。一旦有了这个对象,你可以传递该对象以及需要产生动画的对象来获得一个Animator:
Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
rotationAnim.setDuration(5000ms);
更多使用keyframe的完整的例子,见---> MultiPropertyAnimation

Animating Views

属性动画系统支持View对象的流线型动画(streamlined animation)并且与视图动画相比有一定优势。视图动画是改变View对象绘制的方法,这是由每个View的容器控制的,因为View本身没有可以被操作的属性。这就导致了View产生了动画,但是View本身没有任何变化,最后导致虽然View绘制在其他位置,但是该对象依然存在于原来的位置。在Android 3.0中,加入了新的属性和对应的setter和getter方法来消除这一缺点。

属性动画可以通过改变View对象的实际属性来使View产生动画。另外当属性变化时,Views自动调用invalidate()方法来刷新屏幕。View类中帮助属性动画的新特性是:
  • translationX 和 translationY:该特性控制View定位时,相对于布局容器中设定值的偏移量
  • rotation, rotationX, rotationY:这些属性控制围绕基准点的2D,3D旋转
  • scaleX, scaleY:这些属性控制围绕基准点的2D缩放
  • pivotX, pivotY:这些属性控制基准点的坐标,rotation和scaling变换中出现,默认基准点在对象的中心
  • x 和 y:这是简单实用的属性来描述View在容器中的最终位置,为left值,top值和translationX和translationY值的和
  • alpha:代表View的alpha透明度,默认为1,0表示完全透明(不可见)
为了产生View对象属性动画,比如color或者rotation值,你需要创建一个Property Animator,并且指定你要产生动画的属性。比如
ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f);

使用ViewPropertyAnimator产生动画

ViewPropertyAnimator提供了简单的方法来并行操作一个view的多个属性。他的功能很想ObjectAnimator,因为它改变view属性的实际值,但是同时操作多个动画属性就不太一样。另外,使用ViewPropertyAnimator的代码更加简洁,方便阅读。以下代码片段展示了使用multiple ObjectAnimator,single ObjectAnimator,和ViewPropertyAnimator同时改变view的x 与 y属性:
Multiple ObjectAnimator objects:
ObjectAnimator animX = ObjectAnimator.ofFloat(myView, "x", 50f);
ObjectAnimator animY = ObjectAnimator.ofFloat(myView, "y", 100f);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(animX, animY);
animSetXY.start();
One ObjectAnimator:
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
ViewPropertyAnimator:
myView.animate().x(50f).y(100f);

在XML中声明动画

属性动画允许在XML中声明动画,在XML中定义动画,可以在对个Activities中重复使用,而且更加简单的编辑动画序列。

为了区分使用新的属性动画APIs的动画文件和使用view.animation框架的文件,在Android 3.1后,你应该把属性动画的XML文件保存在res/animator/ 路径下。

下述动画类由下列XML标签来声明:
  • ValueAnimator - <animator>
  • ObjectAnimator - <objectanimator>
  • Animator - <set>
接下来的例子展示两个动画集顺序执行,第一个嵌套的set同时执行两个动画。
<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>
为了执行动画,你必须在代码中将XML文件inflate到一个AnimationSet对象中,然后在动画开始前要指定所有动画的目标对象。调用setTarget()方法来快捷地为该AnimationSet的所有子动画指定一个目标对象。下面代码展示了如何做:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.anim.property_animator);
set.setTarget(myObject);
set.start();
更多定义属性动画的XML语法,详见---> Animation Resource





Win7时间修复(时间错误修复文件) 运行方法:解压后运行reg文件即可。 支持的Win7版本: 1. Windows 7 Starter(入门版 / 初级版) 2. Windows 7 Home Basic(家庭普通版) 3. Windows 7 Home Premium(家庭高级版) 4. Windows 7 Professional(专业版) 5. Windows 7 Enterprise(企业版) 6. Windows 7 Ultimate(旗舰版) 7. Windows 7 Professional for Embedded Systems(嵌入式专业版) 8. Windows 7 Ultimate for Embedded Systems(嵌入式旗舰版) 立即下载

相关推荐

YOLO26算法行人行走检测+训练好的模型+102张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[行走的人(person walking)] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 67 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.8000** mAP50-95 | 0.5620 Precision | 0.5795 Recall | 0.8235 train/box_loss | 0.9538 train/cls_loss | 1.9897 val/box_loss | 0.9034 val/cls_loss | 2.7344 【训练过程分析】 进入训练阶段后,模型一开始的 mAP50 和 mAP50-95 均为 0.8000 和 0.5620,表明在开始阶段模型的收敛情况良好。从第 30 轮起,训练集的 mAP50 值稳定在了 0.8000,这说明模型在这之前能够迅速捕捉到主要目标,但精度提升的余地已然不大。同时,mAP50-95 在训练集上表现略差,从第 50 轮开始慢慢往上走至 0.5620。这反映出模型在检测更小、更远的目标上还存在一定差距,精度成为瓶颈。 随着训练深入,模型在验证集上的表现开始分化。从第 60 轮开始,验证集的 mAP50 和 mAP50-95 值分别为 0.7500 和 0.4500,相比训练集下降明显,表明模型存在一定程度的过拟合现象。训练集上的 box loss 和 cls loss 值分别为 ... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

属性动画(Property Animation)

转载请注明出处:http://blog.youkuaiyun.com/ZhouLi_优快云/article/details/45968639概述andorid系统提供了两种动画系统,属性动画和视图动画。属性动画更灵活并且功能也更强。此外,android还提供了帧动画(drawable animation). 属性动画:andorid3.0引入,允许绘制任何对象,包括没有显示在屏幕上的,并且系统允许自定义类型。

ZhouLi_优快云的专栏 9612

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?

Property Animation

Property Animation https://developer.android.google.cn/guide/topics/graphics/prop-animation.html#app-health 属性动画系统是一个强大的框架,允许您几乎任何动画。您可以定义一个动画以随时间更改任何对象属性,无论它是否绘制到屏幕。属性动画在指定的时间长度内更改属性(对象中的字段)值。要动画某些

z_x_Qiang的博客 520

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

政府科技管理者在推动科技成果转化时,如何解决政策对接不精准导致的项目落地难?.docx

政府科技管理者在推动科技成果转化时,如何解决政策对接不精准导致的项目落地难?

安卓动画之属性动画

一 属性动画概述: 属性动画是API11新加入的特性,和view动画不同,它可以对任何对象进行操作,甚至还可以没有对象,属性动画的默认间隔时间300ms,默认帧率10ms/帧,它的原理就是:在一段时间内完成一个对象一个属性值到另一个属性值的改变。效果6:x轴方向缩放dao。三:属性动画之AnimatorSet 动画集合,不仅可以对同一个对象作用多个属性动画效果,还可以实现顺序控制, 实现方式有代码和xml两种方式。(MainActivity.this, "放弃执行属性动画", Toast.

eeeeety6208的博客 383

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

属性动画

属性动画的常用方法属性  属性动画:通过改变图层绘制视图上面的属性值(支持动画的属性)产生的动画。  1、初始化  + (instancetype)animationWithKeyPath:(nullable NSString *)path  path:需要产生动画的属性  例如:改变中心点会移动  2、keyPath->描述动画的属性 可以产生动画的属性

xyj1204的博客 561

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)内容概要:本文主要介绍了基于Plecs的全桥LLC谐振变换器仿真模型,涵盖变频控制下的多相交错LLC谐振变换器闭环仿真、V2G电动汽车ACDC整流与双向CLLC谐振变换器充放电仿真、LLC谐振变换器的开环与闭环软启动设计,以及储能系统中双向Buck-Boost变换器结合模型预测电流控制和电压下垂控制的仿真研究。同时,文档列举了多种电力电子系统与控制策略的Simulink/Plecs仿真案例,涉及三相交错并联Buck变换器、三电平Buck直流变换器、单相Boost PFC电路等,展示了丰富的电力变换器建模与控制技术。此外,还包括参数设计报告、计算书及相关参考文献,适用于从事电力电子、新能源发电、电动汽车充放电系统等领域的研究人员和技术开发人员。; 适合人群:具备电力电子、自动控制理论基础,从事新能源、电动汽车、电力系统等相关领域研究的研发人员、高校研究生及高年级本科生。; 使用场景及目标:① 学习和掌握LLC谐振变换器及其他典型电力电子变换器的工作原理与建模方法;② 实现闭环控制策略如变频控制、软启动、模型预测控制、下垂控制等的仿真验证;③ 支持科研项目、毕业设计或工程开发中的系统仿真与优化设计。; 阅读建议:建议结合文中提供的仿真模型、设计报告与参考文献,逐步搭建并调试相应系统,重点关注控制策略的实现细节与参数整定过程,以深入理解系统动态响应特性与控制性能。

独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)

内容概要:本文标题为“Plecs全桥LLC谐振变换器仿真模型”,但实际内容严重偏离主题,文档中混杂了大量来自优快云博客平台的无关信息,涵盖多个不同领域的Matlab/Simulink仿真项目,如电力系统优化、无人机路径规划、机器学习预测、微电网调度、卡尔曼滤波、无线能量传输等,导致核心内容缺失。文档未能提供关于Plecs平台下全桥LLC谐振变换器的建模方法、电路结构、参数设计、控制策略或仿真结果等关键技术细节,实质信息与标题完全不符,不具备作为该主题参考资料的有效性。; 适合人群:从事电力电子变换器研究、电源系统设计及相关领域的工程师、高校研究生与科研人员,尤其是希望掌握LLC谐振变换器建模与仿真的专业技术人员。; 使用场景及目标:① 学习并掌握全桥LLC谐振变换器的工作原理与Plecs仿真建模技术;② 开展高效电源转换器的研发与性能优化;③ 作为教学或科研项目中电力电子电路仿真的参考资料。; 阅读建议:鉴于文档内容与标题严重不符,建议读者谨慎甄别,优先选择专业书籍、学术论文或官方仿真软件教程等权威资源进行学习,避免被无效信息误导。

【习题】属性动画

【习题】属性动画 及格分85/ 满分100 判断题 1. 属性动画中产生动画的属性可以在任意位置声明。 正确(True) 错误(False) 回答正确 2. 属性动画中改变属性时需触发UI状态更新。 正确(True) 错误(False) 回答正确 单选题 1. 属性animation可以在哪些组件中使用?

暂时还没想好博客简介 1049

基于多元宇宙优化算法的微电网日前经济调度模型研究(Matlab代码实现)

内容概要:文档《Plecs全桥LLC谐振变换器仿真模型.txt》虽以“Plecs全桥LLC谐振变换器仿真模型”为名,实则是一份涵盖电力电子、电力系统、电机控制、新能源并网、微电网优化调度、储能系统、电动汽车调度、无人机路径规划、信号处理、雷达与状态估计等多个技术方向的综合性仿真资源汇编。内容依托Matlab/Simulink、PLECS、PSCAD等主流仿真平台,聚焦于现代优化算法(如粒子群、遗传算法、多目标差分进化、多元宇宙算法等)在能源系统建模、参数优化与控制策略设计中的应用。文档不仅提供了丰富的仿真案例和研究主题,还附带大量可下载的仿真代码、模型及参考文献,构成一个服务于科研与教学的资源集合。; 适合人群:具备电力电子、电力系统、自动化、控制工程或相关专业背景的研究生、科研人员及工程技术人员,尤其适合熟悉Matlab/Simulink、PLECS或PSCAD等仿真工具并从事相关领域研究的人员。; 使用场景及目标:①为电力系统动态分析、微电网能量管理、电机驱动控制、无人机路径规划等课题提供仿真建模思路与实例参考;②学习和复现先进智能优化算法在复杂工程问题(如经济调度、参数辨识、故障诊断)中的实现方法;③获取可用于学术论文撰写、毕业设计或科研项目申报的完整仿真资源与技术支持。; 阅读建议:此文档为典型的资源聚合型文本,建议读者根据自身研究方向有针对性地选择相关章节进行深入研读,优先关注与自己课题契合度高的仿真模型和算法实现,并结合所提供的代码与模型进行实践验证与二次开发,注意区分不同研究主题的边界,避免信息混淆。

Android动画——属性动画

在属性动画中,常用到的API有ValueAnimator,ObjectAnimator。ValueAnimator:时间引擎,负责计算各个帧的属性值,基本上其他属性动画都会直接或间接继承它;ObjectAnimator: ValueAnimator 的子类,对指定对象的属性执行动画。属性动画可以看作是增强版的补间动画,与补间动画的不同之处体现在:补间动画只能定义两个关键帧在透明、旋转、位移和倾斜这四个属性的变换,但是属性动画可以定义任何属性的变化。

https://blog.youkuaiyun.com/qFAFAF 1145

隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】

内容概要:本文档系统性地介绍了隔离型全桥LLC谐振变换器的建模、参数设计与控制策略研究,配套提供Simulink闭环仿真模型、详细设计报告及Mathcad计算书等全套技术资料。内容涵盖变频与移相混合控制、谐振参数优化、软启动过程分析、恒压恒流双闭环控制等核心技术,并延伸至2.5kW双向全桥LLC、多相交错LLC等多种典型应用场景。此外,资料还整合了PFC、DAB、CLLC、三电平变换器等相关电力电子拓扑的仿真与控制设计资源,辅以PPT说明、参考文献与程序代码,构建了一个面向科研与工程实践的完整技术解决方案。; 适合人群:具备电力电子与电力系统基础知识,从事新能源变换器、高频开关电源、车载充电机、储能系统等方向研究的研究生、工程师及科研人员。; 使用场景及目标:① 掌握LLC谐振变换器的小信号建模方法与谐振腔参数匹配设计流程;② 学习高频软开关电路的闭环控制策略与稳定性分析方法;③ 借助仿真模型快速验证不同工况下的系统动态性能,支撑科研项目开发、论文撰写与产品原型设计。; 阅读建议:建议结合Mathcad计算书与Simulink仿真模型同步调试,重点剖析谐振元件选型依据、控制环路动态响应特性及闭环系统稳定性判据,强化理论与实践的深度融合,全面提升高频隔离变换器的工程设计能力。

三电平Buck直流变换器双闭环、单闭环、开环仿真【附参考文献】(Simulink仿真实现)

内容概要:本文提供了一套关于三电平Buck直流变换器的Simulink仿真资源,系统地实现了开环、单闭环与双闭环三种控制模式的建模与仿真,并附有参考文献支持。资源重点展示了不同控制策略下变换器在动态响应、稳定性和抗干扰能力方面的性能差异,尤其突出了双闭环控制在提升系统响应速度、抑制负载扰动和增强电压调节精度方面的显著优势。通过对比分析三种控制结构的仿真结果,帮助使用者深入理解反馈控制机制对电力电子系统性能的影响,适用于高精度电源管理和新能源系统等对电能质量要求较高的应用场景。; 适合人群:电力电子、自动化、电气工程等相关专业的本科生、研究生及科研人员,以及从事开关电源设计、新能源变换器开发、工业电源系统优化等方向的工程技术人员。; 使用场景及目标:①学习三电平Buck变换器的工作原理及其建模方法;②掌握电压模式控制与电流模式控制的基本设计思路;③对比分析开环、单闭环与双闭环控制系统的动态与稳态性能;④开展电力电子变换器控制器的设计、优化与验证,支撑课程实验、毕业设计或科研项目中的控制系统研究。; 阅读建议:建议结合提供的Simulink仿真模型与参考文献进行同步学习,动手搭建并调试不同控制结构,观察输出电压、电感电流等关键波形的变化,深入理解PI参数调节、反馈环路设计对系统性能的影响,从而全面提升对现代电力电子控制系统的设计与分析能力。

上一篇: Animation and Graphics partⅠ Overview
下一篇: 记录一下CountDownLatch 和 CyclicBarrier 的使用例子
Appletable
博客等级 码龄14年 0粉丝 36原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值