播放动画前ImageView中图片会闪一下怎么破

先上代码:

Rect visibleRect =  new Rect();

                oldImage.getLocalVisibleRect(visibleRect);

                rectFrom = new Rect(visibleRect);
                rectTo = new Rect(visibleRect);
                rectTo.top = 433;
                rectTo.bottom = 899;

                rectFromNew = new Rect(visibleRect);
                rectFromNew.top = -433;
                rectFromNew.bottom = 0;
                rectToNew = new Rect(visibleRect);

                oldImage.setVisibility(View.VISIBLE);
                newImage.setVisibility(View.VISIBLE);

                oldImage.setImageResource(R.drawable.old);
                newImage.setImageResource(R.drawable.new);

                Animator animatorOld = ObjectAnimator.ofObject(oldImage, "clipBounds", new RectEvaluator(), rectFrom, rectTo);
                Animator animatorNew = ObjectAnimator.ofObject(newImage, "clipBounds", new RectEvaluator(),rectFromNew, rectToNew );



                Animator.AnimatorListener listenerOld = new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animator) {

                    }

                    public void onAnimationStart(Animator animator) {


                    }

                    public void onAnimationRepeat(Animator animator) {


                    }

                };


                Animator.AnimatorListener listenerNew = new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animator) {

                    }

                    public void onAnimationStart(Animator animator) {

                    }

                    public void onAnimationRepeat(Animator animator) {

                    }

                };

                animatorOld.addListener(listener);
                animatorNew.addListener(listenerNew);

                animatorOld.setDuration(SOME_TIME);
                animatorNew.setDuration(SOME_TIME);
                animatorOld.start();
                animatorNew.start(); 


我想在两个重叠的图片上实现ppt那种擦除交替的效果,现在效果是有了,但是在播放动画之前新的图片总是会闪一下,然后消失,然后正常播放动画。那几个动画监听器我都试过了,在里面放上

setVisibility(View.INVISIBLE);

诸如此类的语句等等,一点点用都没有,弄得我都开始怀疑人生了。其中一个我试的是在layout里面把新图片默认设为invisible,然后监听器里面在onAnimationStart放入

setVisibility(View.VISIBLE);

按照道理应当是动画开始播放后新图片才可见,但是没用,依旧是有个一闪而过的过程。

谁能跑下我的代码看看问题如何解决?那个动画开始前的一瞬间新图片闪一下必须得去掉。
2018-08-10 18:04 添加评论 分享
已邀请:
0

WangYoyHu - Android开发攻城狮

赞同来自:

你应该了解一下动画属性 可能是你设置了播放动画前显示动画结束的状态 以下是本人示例代码
动画分好多种 帧动画 补间动画 属性动画 先示例平移吧 也可以同时实现两个动画同时进行 有一个旋转动画
需要用矩阵 但我用了数学集合控制时间 9张图片旋转 效果像加载的时候转圈的动画
package com.liziyang.dall.myapplication;

import android.graphics.Color;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class Main4 extends Activity {
private MyView myView;
private ImageView imageView;
private Button button8,button9;
private TextView textView;
private TranslateAnimation translateAnimation;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate( savedInstanceState );
    setContentView( R.layout.activity_main4 );
    button8=findViewById( R.id.button8 );
    imageView=findViewById( R.id.imageView4);
    textView=findViewById( R.id.textView2 );
    button9=findViewById( R.id.button9 );
    button8.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //如果只是平移x轴(左右) 只要改x
            //如果只是平移y轴(上下) 只要改y
            //如果想对角平移(x,y) x y都要设置
            //起始点from 终点to xy坐标
            //默认为匀速
            final TranslateAnimation translateAnimation=new TranslateAnimation(0,1000,0,0);
            //设置持续时间
            // 会根据平移的路程自适应速度
            translateAnimation.setDuration( 1000 );
            //设置保持最终状态
            // 布尔值类型
            translateAnimation.setFillAfter( true );
            //设置保持初始状态
            //初始状态不可以与最终状态一起用 否则保持最终状态
            translateAnimation.setFillBefore( true );
            //设置背景颜色
            translateAnimation.setBackgroundColor( Color.red( 1 ));
            //设置重复次数
            //int类型
            translateAnimation.setRepeatCount( 3 );
            //设置动画反着运行
            //translateAnimation.setRepeatMode( 2 );
            //设置开始延续时间
            //int类型
            translateAnimation.setStartOffset( 1000 );
            //重置动画 平移动画为补间动画
            //translateAnimation.reset();
            //开始动画 可以设置继续暂停
            //translateAnimation.start();
            //translateAnimation.setInterpolator( Main4.this,1 );

            //设置监听
            translateAnimation.setAnimationListener( new Animation.AnimationListener() {
                //动画开始
                @Override
                public void onAnimationStart(Animation animation) {
                    textView.setText( "平移动画开始" );

                }
                //动画结束

                @Override
                public void onAnimationEnd(Animation animation) {
                    textView.setText( "平移动画结束" );

                }

                //动画重复播放做的工作
                @Override
                public void onAnimationRepeat(Animation animation) {
                    textView.setText( "数据获取出错 正在尝试修复" );

                }
            } );
            //开始动画
            //别忘了这步
            imageView.startAnimation( translateAnimation );
            button9.setOnClickListener( new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //取消动画
                    //cancel取消
                    translateAnimation.cancel();

                }
            } );



        }
    } );



}



}


有疑问请加Q1740747328

要回复问题请先登录注册

退出全屏模式 全屏模式 回复