我在onCreate
事件中使用翻译和旋转动画来定位FrameLayout
中的View
。我希望动画能够立即执行,因此我将它们的持续时间设置为0。但是当应用程序启动时,我的View
会在屏幕左上角短暂地闪烁,然后根据动画参数定位。如何避免这种闪烁?
我在onCreate
事件中使用翻译和旋转动画来定位FrameLayout
中的View
。我希望动画能够立即执行,因此我将它们的持续时间设置为0。但是当应用程序启动时,我的View
会在屏幕左上角短暂地闪烁,然后根据动画参数定位。如何避免这种闪烁?
我花了一整天的时间来解决这个问题。fillAfter和fillBefore与此无关。在动画开始之前尝试使用以下方法:
view.setVisibility(View.GONE); // view is our View we trying to animate
animation.setAnimationListener(new AnimationListener(){
public void onAnimationEnd(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationStart(Animation animation) {
v.setVisibility(View.VISIBLE);
}
根据您的需求使用animation.setFillAfter(true)
或animation.setFillBefore(true)
,这应该解决闪烁问题。
View
的结束位置,而不会看到它的起始位置。 - Pavlo Viazovskyy在动画文件的父标签内使用一个<style>标签会导致这种情况发生,请尝试只使用一个<style>标签,您会看到不同。我正在处理这个问题。
将可见性设置在动画执行代码之后,而不是在“onAnimationEnd”中,还尝试设置持续时间
view.setVisibility(View.VISIBLE); // view is our View we trying to animate
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true">
<set
android:duration="1000">
<translate
android:fromXDelta="100%"
android:toXDelta="0"
/>
</set>
</set>
将其更改为:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true" android:duration="1000">
<translate
android:fromXDelta="100%"
android:toXDelta="0"
/>
</set>