2014-10-04 60 views
5

我想提出一个汉字卡片应用两个视图之间卡翻转动画。我想要有一个LinearLayout代表正面,另一个代表卡的背面,我已经在一个XML布局中声明。 问题是,所述第二LinearLayout总是不可见的,第一个正常的动画。 无论如何要在动画正在进行时进行方法调用吗?我想将第一个布局的可见性设置为GONE,第二个设置为VISIBLE实现使用AnimatorSet

还是有实现翻转卡的另一个更好的办法?

以下是我的代码。预先感谢。

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/card_container_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#ff825e4e" > 

     <LinearLayout 
      android:id="@+id/card_front_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="10dp" 
      android:gravity="center" 
      android:background="@drawable/card_shape_front"> 
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="傘" 
       android:textColor="#ff000000" 
       android:textSize="200sp"/> 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/card_back_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center" 
      android:layout_margin="10dp" 
      android:background="@drawable/card_shape_front"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="16dp" 
       android:gravity="center" 
       android:text="QWERTY" 
       android:textColor="#ff000000"/> 
     </LinearLayout> 
</LinearLayout> 

FlashcardsFragment.java

public class FlashcardsFragment extends Fragment 
{ 
    private AnimatorSet showFrontAnim = new AnimatorSet(); 
    private AnimatorSet showBackAnim = new AnimatorSet(); 
    private boolean isShowingBack = false; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View v = inflater.inflate(R.layout.fragment_flashcard, container, false); 

     LinearLayout cardFront = (LinearLayout) v.findViewById(R.id.card_front_layout); 
     LinearLayout cardBack = (LinearLayout) v.findViewById(R.id.card_back_layout); 

     // Load the animator sets from XML and group them together 

     AnimatorSet leftIn = (AnimatorSet) AnimatorInflater 
       .loadAnimator(getActivity(), R.animator.card_flip_left_in); 
     AnimatorSet rightOut = (AnimatorSet) AnimatorInflater 
       .loadAnimator(getActivity(), R.animator.card_flip_right_out); 
     AnimatorSet leftOut = (AnimatorSet) AnimatorInflater 
       .loadAnimator(getActivity(), R.animator.card_flip_left_out); 
     AnimatorSet rightIn = (AnimatorSet) AnimatorInflater 
       .loadAnimator(getActivity(), R.animator.card_flip_right_in); 

     leftIn.setTarget(cardFront); 
     rightOut.setTarget(cardBack); 
     showFrontAnim.playTogether(leftIn, rightOut); 

     leftOut.setTarget(cardFront); 
     rightIn.setTarget(cardBack); 
     showBackAnim.playTogether(leftOut, rightIn); 

     LinearLayout cardContainer = (LinearLayout) 
       v.findViewById(R.id.card_container_layout); 
     // Set the flip animation to be triggered on container clicking 
     cardContainer.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       if (isShowingBack) { 
        showFrontAnim.start(); 
        isShowingBack = false; 
       } 
       else { 
        showBackAnim.start(); 
        isShowingBack = true; 
       } 
      } 
     }); 

     return v; 
    } 
} 

回答

0

你可以使用:

cardFront.setVisibility(View.VISIBLE); 
cardBack.setVisibility(View.GONE); 

这会在你想要的任何地方更改代码里面的布局的知名度。

+0

谢谢,但我想知道的是如何插入而那些意见是动画调用。 – kradragon 2014-10-04 10:52:57

+0

@kradragon你可以尝试playTogether方法... – tibuurcio 2014-10-04 10:54:51

+0

因为动画还没有开始这将无法正常工作后给他们打电话。我想在半动画时间更改视图。 – kradragon 2014-10-04 11:04:36

1

在你AnimatorSet,你可以在Alpha设置为0或1只能使用startDelay所占用的方法来设置1毫秒长的动画总AnimationSet长度的中间增加一个额外的动画。

如果你想提高你的翻转深入了解一下AdapterViewFlipper :)

3

编辑:我的问题已经解决了,我改变了容器布局FrameLayout,这样的两种观点可以相互重叠。感谢所有:))