首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Animated Vector Drawable无法正常工作

Android Animated Vector Drawable无法正常工作
EN

Stack Overflow用户
提问于 2021-09-05 11:15:40
回答 1查看 90关注 0票数 1

我有以下ImageView

代码语言:javascript
运行
复制
<androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/image_header_toggle"
        android:layout_width="28dp"
        android:layout_height="28dp"
        android:layout_marginEnd="10dp"
        app:layout_constraintBottom_toBottomOf="@+id/text_header_name"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@+id/text_header_name"
        android:src="@drawable/ic_header_off_to_on"
        app:tint="?attr/colorPrimary"/>

和两个我通过https://shapeshifter.design/制作的动画绘图

ic_header_off_to_on.xml

代码语言:javascript
运行
复制
<animated-vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt">
    <aapt:attr name="android:drawable">
        <vector
            android:name="vector"
            android:width="24dp"
            android:height="24dp"
            android:viewportWidth="24"
            android:viewportHeight="24">
            <group
                android:name="group"
                android:pivotX="12"
                android:pivotY="12">
                <path
                    android:name="path_1"
                    android:pathData="M 15.41 16.58 L 10.83 12 L 15.41 7.41 L 14 6 L 8 12 L 14 18 L 15.41 16.58 Z"
                    android:fillColor="#000"
                    android:strokeWidth="1"/>
            </group>
        </vector>
    </aapt:attr>
    <target android:name="group">
        <aapt:attr name="android:animation">
            <objectAnimator
                android:propertyName="rotation"
                android:duration="300"
                android:valueFrom="0"
                android:valueTo="-90"
                android:valueType="floatType"
                android:interpolator="@android:interpolator/fast_out_slow_in"/>
        </aapt:attr>
    </target>
</animated-vector>

ic_header_on_to_off.xml

代码语言:javascript
运行
复制
<animated-vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt">
    <aapt:attr name="android:drawable">
        <vector
            android:name="vector"
            android:width="24dp"
            android:height="24dp"
            android:viewportWidth="24"
            android:viewportHeight="24">
            <group
                android:name="group"
                android:pivotX="12"
                android:pivotY="12"
                android:rotation="270">
                <path
                    android:name="path_1"
                    android:pathData="M 15.41 16.58 L 10.83 12 L 15.41 7.41 L 14 6 L 8 12 L 14 18 L 15.41 16.58 Z"
                    android:fillColor="#000"
                    android:strokeWidth="1"/>
            </group>
        </vector>
    </aapt:attr>
    <target android:name="group">
        <aapt:attr name="android:animation">
            <objectAnimator
                android:propertyName="rotation"
                android:duration="300"
                android:valueFrom="270"
                android:valueTo="0"
                android:valueType="floatType"
                android:interpolator="@android:interpolator/fast_out_slow_in"/>
        </aapt:attr>
    </target>
</animated-vector>

我用来切换图标的代码

代码语言:javascript
运行
复制
val res = if (isExpanded) R.drawable.ic_header_off_to_on else R.drawable.ic_header_on_to_off
    
image_header_toggle.setImageResource(res)
(view.image_header_toggle.drawable as? AnimatedVectorDrawable)?.start()
image_header_toggle.setOnClickListener { isExpanded = !isExpanded }

off_to_on动画似乎播放得很好,但on_to_off动画却不是这样,图像只是被替换掉了。It looks like this >_<

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 00:59:26

我刚刚发现了这个问题,并尝试了一些东西。更优雅的解决方案是删除您的Kotlin代码和我的。这将实现平稳过渡,您甚至可以更改过渡的持续时间。你可以只使用一个,而不是需要两个可绘制的。如果使用Fragment而不是Activity,请不要忘记设置view.findViewById而不是findViewById

代码语言:javascript
运行
复制
class MainActivity : AppCompatActivity() {

    private var isExpanded = true

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val imageView = findViewById<ImageView>(R.id.image_header_toggle)

        imageView.setOnClickListener {
            if (!isExpanded) {
                imageView.animate().apply {
                duration = 500
                rotation(0f)
                isExpanded = true}
            }else{
                imageView.animate().apply {
                duration = 500
                rotation(-90f)
                isExpanded = false}
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69062866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档