Alpha淡出不在Imageview动画中工作

时间:2016-05-24 02:56:35

标签: android animation alpha

我尝试在单独的图像视图中使用淡出/淡入淡出来交换两个图像。第一个图像淡出,然后另一个图像淡出,然后第二个图像在用第一个图像替换时淡入,然后第一个图像淡入,同时被第二个图像替换(交换图像淡出/淡入)。代码如下。交换正在发生,但没有淡出或进入。我想要消除α衰落的原因是什么?此外,如果我使用整数(例如1500)而不是mShortAnimationDuration,则不会触发animationlistener。 setDuration参数的类型为long。我将代码基于此处的示例:https://developer.android.com/training/animation/crossfade.html

    Drawable target_draw = target.getDrawable();
    Drawable dragged_draw = dragged.getDrawable();
    final Bitmap targetBitmap = ((BitmapDrawable)target_draw).getBitmap();
    final Bitmap draggedBitmap = ((BitmapDrawable)dragged_draw).getBitmap();

    //SWAP and CROSSFADE ANIMATION
    dragged.setAlpha(1f);
    target.setAlpha(1f);

    int mShortAnimationDuration = getResources().getInteger(android.R.integer.config_shortAnimTime);

     dragged.animate()
         .alpha(0f)
         .setDuration(mShortAnimationDuration)
         .setListener(new AnimatorListenerAdapter() {            
               @Override
               public void onAnimationEnd(Animator animation) {
                   dragged.setImageBitmap(targetBitmap);
                   dragged.invalidate();
                }
           });


     target.animate()
         .alpha(0f)
         .setDuration(mShortAnimationDuration)
         .setListener(new AnimatorListenerAdapter() {
             @Override
             public void onAnimationEnd(Animator animation) {
                 target.setImageBitmap(draggedBitmap);
                 target.invalidate();
             }
         });

     //fade in with new images
     target.animate()
         .alpha(1f)
         .setDuration(1500);


     dragged.animate()
         .alpha(1f)
         .setDuration(1500);

更新: 我终于想出了以下基本可行的代码,但是由于Android不是实时操作系统,而且我在淡入淡出过渡期间交换图像并调用invalidate()这一事实使得褪色有些不可预测。

dragged.animate()
    .alpha(0f)
    .setDuration(1000)
    //.setInterpolator(new DecelerateInterpolator()) //optional
    .setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            dragged.setImageBitmap(targetBitmap);
            dragged.invalidate();
            dragged.animate()
                .alpha(1f)
                //.setInterpolator(new AccelerateInterpolator())
                .setDuration(1000);
                //.setStartDelay(500); //also optional for timing
                }
         });


 target.animate()
     .alpha(0f)
     .setDuration(1000)
     .setStartDelay(500)
     //.setInterpolator(new DecelerateInterpolator())
     .setListener(new AnimatorListenerAdapter() {
         @Override
         public void onAnimationEnd(Animator animation) {
         target.setImageBitmap(draggedBitmap);
         target.invalidate();
         target.animate()
         .alpha(1f)
         //.setInterpolator(new AccelerateInterpolator())
         //.setStartDelay(500)
         .setDuration(1000);
      }
  });

...更新继续: 由于在它们之间的图像交换,衰落的时间不一致,我简化并消除了淡出,并保持图像交换和淡入。这是我最终得到的代码。我正在寻找更有趣的方法来动画Imageview交换,如果有人有任何想法。

// swap
            dragged.setImageBitmap(targetBitmap);
            dragged.invalidate();
            target.setImageBitmap(draggedBitmap);
            target.invalidate();

            // then fade-in with delay
            Animation fadeIn = new AlphaAnimation(0, 1);
            fadeIn.setInterpolator(new DecelerateInterpolator());
            Animation fadeIn2 = new AlphaAnimation(0, 1);
            fadeIn2.setInterpolator(new DecelerateInterpolator());
            fadeIn2.setStartOffset(300);
            fadeIn.setDuration(2000);
            fadeIn2.setDuration(2000);
            target.startAnimation(fadeIn);
            dragged.startAnimation(fadeIn2);

0 个答案:

没有答案