• 赚钱入口【需求资源】限时招募流量主、渠道主,站长合作;【合作模式】CPS长期分成,一次推广永久有收益。主动打款,不扣量;

使用新改进的AnimatedVectorDrawable暂停并查找动画

Android rin, seun 1年前 (2020-06-22) 425次浏览 0个评论

AnimatedVectorDrawable

Android SDK 21引入了VectorDrawableAnimatedVectorDrawable。这使您可以在应用程序中使用矢量资产,甚至可以对其进行动画处理。

从那时起,他们就对这些进行了迭代,但是AnimatedVectorDrawable仍然缺少一些内容。您无法操纵和控制动画。没有暂停或搜索功能。

核心动画

Android团队一直在努力向后移植框架Animator API。他们创建了一个单独的未捆绑的AndroidX库,称为Core-Animation。

Animator API已经存在了一段时间。但是他们没有提供暂停和查找功能所需的功能。因此,需要将它们拆开,然后再进行迭代。

Vectordrawable-Seekable

一旦Core-Animation可用,Android团队便可以创建Vectordrawable-Seekable库。该库围绕该类SeekableAnimatedVectorDrawable

在底层,该类使用AnimatorSet,随后Animator使用Core-Animation。这些提供了暂停和查找功能。

怎么做?

首先,您需要为动画设置图像的矢量资产。如果简单且经过优化,则效果最佳。

有关优化资产的信息,请参见以下资源:

– https://www.brightec.co.uk/blog/creating-vector-drawables-android

– https://arturdryomov.dev/posts/optimizing-android-vector-images/

对于此示例,我将使用Android:

<vector xmlns:android=http://schemas.android.com/apk/res/android
android:width=208dp
android:height=157dp
android:viewportWidth=208
android:viewportHeight=157>
<group android:name=body>
<path
android:fillColor=#000000
android:pathData=M118.5,146C123,146 127,142.5 127,138L127,118L132,118C135.5,118 138,115 138,112L138,56L70,56L70,112C70,115 72.5,118 76,118L81,118L81,138C81,142.5 85,146 89.5,146C94,146 98,142.5 98,138L98,118L110,118L110,138C110,142.5 114,146 118.5,146Z />
</group>
<group
android:name=arm-left
android:pivotX=152.5
android:pivotY=56>
<path
android:fillColor=#000000
android:pathData=M152.5,112C157,112 161,108.5 161,104L161,64C161,59.5 157,56 152.5,56C148,56 144,59.5 144,64L144,104C144,108.5 148,112 152.5,112Z />
</group>
<group
android:name=arm-right
android:pivotX=55.5
android:pivotY=56>
<path
android:fillColor=#000000
android:pathData=M55.5,112C60,112 64,108.5 64,104L64,64C64,59.5 60,56 55.5,56C51,56 47,59.5 47,64L47,104C47,108.5 51,112 55.5,112Z />
</group>
<group android:name=head>
<path
android:fillColor=#000000
android:pathData=M131,12C130,11 128,11 127,12L119,20C114.5,17.5 110,16.5 104.5,16.5C104.5,16.5 104,16.5 104,16.5C104,16.5 103.5,16.5 103.5,16.5C98,16.5 93.5,17.5 89,20L81,12C80,11 78,11 77,12C76,13 76,15 77,16L84,23C81.5,24.5 80,26.5 78,29C73.5,34.5 70.5,41.5 70,49C70,49 70,50.5 70,51L138,51C138,50.5 138,49 138,49C137.5,41.5 134.5,34.5 130,29C128,26.5 126.5,24.5 124,23L131,16C132,15 132,13 131,12ZM90,40C87.5,40 86,38.5 86,36C86,33.5 87.5,32 90,32C92.5,32 94,33.5 94,36C94,38.5 92.5,40 90,40ZM118,40C115.5,40 114,38.5 114,36C114,33.5 115.5,32 118,32C120.5,32 122,33.5 122,36C122,38.5 120.5,40 118,40Z />
</group>
</vector>

使用新改进的AnimatedVectorDrawable暂停并查找动画

该XML文件应放在您的res/drawable目录中。

注意组名,因为它们使我们以后可以引用图像的每个部分。还要注意定义的枢轴点。这些定义了将围绕其旋转的枢轴。

要定义动画本身,您可以创建另一个XML文件。这定义了一个ObjectAnimator

<?xml version=1.0 encoding=utf-8?>
<set xmlns:android=http://schemas.android.com/apk/res/android>
<objectAnimator
android:duration=600
android:interpolator=@android:anim/linear_interpolator
android:propertyName=rotation
android:repeatCount=infinite
android:repeatMode=reverse
android:valueFrom=180
android:valueTo=220
android:valueType=floatType />
</set>

该文件进入您的res/anim目录。

您可以从属性中看到这是旋转动画。通过向前,然后反向和向后移动,它将无限重复。600每次重复时,它将在180 毫秒至220 毫秒的范围内旋转。

我们可以将两者结合成一个animated-vector。可以再次在XML文件中定义它。

<?xml version=1.0 encoding=utf-8?>
<animated-vector xmlns:android=http://schemas.android.com/apk/res/android
android:drawable=@drawable/img_android>
<target
android:name=arm-left
android:animation=@anim/rotation />
</animated-vector>

该XML文件应放在您的res/drawable目录中。

该文件连接图像和动画。可绘制对象在顶部附近定义。动画rotation的目标是arm-left

该XML文件应放在您的res/drawable目录中。

该文件连接图像和动画。可绘制对象在顶部附近定义。动画rotation的目标是arm-left

现在,您可以使用它animated-vector在屏幕上显示动画。

可以ImageView通过以下方式进行设置:

app:srcCompat =“ @ drawable / img_android_animated”

或者您可以通过编程定义它:

val drawable = AnimatedVectorDrawableCompat.create(
    this,R.drawable.img_android_animated 
)imageView.setImageDrawable 
(drawable)
drawable.start()
喜欢 (0)

您必须 登录 才能发表评论!