Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Tween动画在startAnimation()上闪烁_Android_Android Animation - Fatal编程技术网

Android Tween动画在startAnimation()上闪烁

Android Tween动画在startAnimation()上闪烁,android,android-animation,Android,Android Animation,我有一个框架布局,有两个图像视图。一个在另一个之上 <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp"> <ImageView android:id="@+id/post_image" android:layout_width="match_pare

我有一个框架布局,有两个图像视图。一个在另一个之上

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp">

<ImageView
    android:id="@+id/post_image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true" />

<ImageView
    android:id="@+id/double_tap_heart"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center"
    android:src="@drawable/double_tap_heart" 
    android:visibility="invisible"/>

</FrameLayout>
每当有人双击柱子时。我所面临的问题是,在动画开始之前,double_tap_heart drawable在全尺寸下闪烁约1ms。动画结束后,ImageView恢复为不可见状态


如何使ImageView仅在动画期间显示而不显示闪烁效果?我已经看过其他几篇关于这方面的文章,但是没有有效的答案。我已经尝试过setAlpha()和setzaadjustment(),但没有任何东西能摆脱这种眨眼现象。

对于那些在自己寻找答案时可能遇到这个问题的人来说

闪烁问题是由于我们使用的是视图动画而引起的。这是安卓3.0之前使用的动画系统。视图动画本质上更为原始,因为它们将动画应用于视图的容器。不幸的是,当视图在动画之前消失或不可见时,这会导致问题

答案是什么???使用Androids新建动画系统属性动画 这消除闪烁的原因是,它将动画中定义的更改直接应用于正在使用的视图的属性。因此命名为“属性”动画。。。其中,另一个可以称为“容器”动画

最佳实践是在布局xml文件中最初将视图的alpha设置为0.0。然后在动画中更改alpha以使其可见,并在动画结束时将alpha更改回0.0,这样就不必使视图可见/不可见/消失

希望这能帮助别人

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">

    <set
        android:interpolator="@android:anim/accelerate_decelerate_interpolator">
        <scale
            android:duration="400"
            android:fromXScale="0.3"
            android:fromYScale="0.3"
            android:toXScale="1.15"
            android:toYScale="1.15"
            android:pivotX="50%"
            android:pivotY="50%"/>
        <alpha
            android:duration="400"
            android:fromAlpha="0.0"
            android:toAlpha="1.0" />
    </set>
    <set
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:startOffset="400">
        <scale
            android:duration="100"
            android:fromXScale="1.15"
            android:fromYScale="1.15"
            android:toXScale="1.0"
            android:toYScale="1.0"
            android:pivotX="50%"
            android:pivotY="50%"/>
    </set>
    <set
        android:startOffset="500">
        <scale
            android:duration="300"
            android:fromXScale="1.0"
            android:fromYScale="1.0"
            android:toXScale="1.0"
            android:toYScale="1.0"
            android:pivotX="50%"
            android:pivotY="50%"/>
        </set>
    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="800" >
        <scale
            android:duration="200"
            android:fromXScale="1.0"
            android:fromYScale="1.0"
            android:toXScale="0.2"
            android:toYScale="0.2"
            android:pivotX="50%"
            android:pivotY="50%"/>
        <alpha
            android:duration="200"
            android:fromAlpha="1.0"
            android:toAlpha="0.0" />
        </set>

</set>
ImageView doubleTapHeart = (ImageView) findViewById(R.id.double_tap_heart);
doubleTapHeart.startAnimation(doubleTapHeartAnimation);