2016-08-18 3 views
0

На самом деле вопрос в том, почему после первой флип-анимации изображение всегда отображается в перевороте (похоже, что изображение всегда начинается с исходного положения).Как анимировать флип изображение на изображении

Имея два изображения, отображается только один. Нажав на него, он будет анимировать флип с помощью Y ax и скрыть изображениеView, а затем отобразить другое изображение. Когда вы нажмете снова, он повторит процесс для возврата первого изображения.

проблема заключается в том, что при нажатии на изображение, которое он оживляет, переворачивается и переключается с одного изображения на другое, флип и переключатель работают нормально. Но в следующий раз, нажимая на него снова, он предполагает вернуться к другому изображению и откинуть его обратно. Но изображение после анимации остается в перевернутом состоянии (обратное изображение).

фрагмент кода ниже,

<RelativeLayout 
    android:id="@+id/imager_contaner" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginLeft="5dp"> 

<ImageView 
    android:id="@+id/imgAvatar" 
    android:layout_width="28dp" 
    android:layout_height="28dp" 
    android:layout_gravity="center" 
    android:background="@drawable/oval" 
    android:src="@mipmap/iamge_one” 
    android:scaleType="fitCenter" 
/> 

<ImageView 
    android:id="@+id/imgAvatar_checked" 
    android:layout_width="28dp" 
    android:layout_height="28dp" 
    android:layout_gravity="center" 
    android:scaleType="fitCenter" 
    android:background="@drawable/oval" 
    android:src="@mipmap/check_icon” 
    android:visibility="gone" 
    /> 
</RelativeLayout> 


View imager_contaner = convertView.findViewById(R.id. imager_contaner); 
final ImageView ivAvatar = (ImageView)convertView.findViewById(R.id.imgAvatar); 
ImageView avatarChecked = (ImageView)convertView.findViewById(R.id.imgAvatar_checked); 

vatarContainer.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Object o = imager_contaner.getTag(); 

      final boolean isChecked = (o != null && (o instanceof String) && ((String)(o)).equals("checked")); 
      if (isChecked) { 
       imager_contaner.setTag(""); 
      } else { 
       imager_contaner.setTag("checked"); 
      } 

      final int rotate = 179; //!isChecked ? 179 : -179; 

      final View animAvatarView = !isChecked ? showingAvater : avatarChecked; 

      ObjectAnimator anim3 = ObjectAnimator.ofFloat(animAvatarView, "rotationY", 0, rotate); 
      anim3.setDuration(500); 
      anim3.addListener(new Animator.AnimatorListener() { 
       @Override 
       public void onAnimationStart(Animator animation) { 

       } 

       @Override 
       public void onAnimationEnd(Animator animation) { 

        if (!isChecked) { 
         showingAvater.setVisibility(View.GONE); 
         avatarChecked.setVisibility(View.VISIBLE);      
        }  
        else { 
         avatarChecked.setVisibility(View.GONE); 
         showingAvater.setVisibility(View.VISIBLE); 
        } 

       } 

       @Override 
       public void onAnimationCancel(Animator animation) { 

       } 

       @Override 
       public void onAnimationRepeat(Animator animation) { 

       } 
      }); 

      anim3.start(); 


     } 
    }); 

ответ

1

Вот что происходит:

  • повернуть первый ImageView на 179
  • скрыть первый ImageView и отображения второго ImageView
  • повернуть второй ImageView на 179
  • скрыть второй ImageView и сделать первый ImageView видимым

Первый ImageView был повернут на 179 затем видимости, установленным в GONE, но она по-прежнему вращается 179. Вращение первого ImageView никогда не сбрасывается в ноль, то снова скрывается, а затем снова показывает уже повернутый ImageView.

В вашем onAnimationEnd вы можете добавить код для восстановления свойств rotationY, например.

@Override 
public void onAnimationEnd(Animator animation) { 

    if (!isChecked) { 
     showingAvater.setVisibility(View.GONE); 
     showingAvater.setRotationY(0); 
     avatarChecked.setVisibility(View.VISIBLE);      
    }  
    else { 
     avatarChecked.setVisibility(View.GONE); 
     avatarChecked.setRotationY(0); 
     showingAvater.setVisibility(View.VISIBLE); 
    } 

} 
+0

Это сработало, спасибо! – lannyf

+0

хороший, без проблем! –

Смежные вопросы