2014-02-06 4 views
3

조각을 표시하는 응용 프로그램에서 일하고 있습니다. 사용자가 단편의 버튼을 클릭하면 해당 단편이 80 % 아래로 내려 가서 다른 단편을 보여줍니다. 내가 가지고있는 문제는 버튼을 클릭하면 조각이 80 % 아래로 내려 갔지만 두 번째 조각 만 보여 주면 화면이 다시 그려진다는 것입니다. 어떤 도움이 필요합니까?조각 슬라이드 아래로 애니메이션

버튼을 클릭 할 때 실행되는 코드를 제공합니다. 및 애니메이션 파일

public void onClick(View v) { 
    // TODO Auto-generated method stub 

    switch(v.getId()) 
    { 
     case R.id.button1: 

      ProfileFragment pro = new ProfileFragment(); 


    ((MainActivity) getActivity()).tra =((MainActivity) ()).fragmentManager.beginTransaction();       

      ((MainActivity) getActivity()).mFragmentStack.add(pro.toString()); 
    getActivity()).tra.setCustomAnimations(R.anim.slide_in_top, R.anim.slide_out_bottom); 
      ((MainActivity) getActivity()).tra.replace(R.id.fragment_swap,pro); 

      ((MainActivity) getActivity()).tra.addToBackStack(pro.toString()); 
      ((MainActivity) getActivity()).tra.commit(); 

      break; 

    } 

} 

Slide_out_bottom :

 <?xml version="1.0" encoding="utf-8"?> 
     <set xmlns:android="http://schemas.android.com/apk/res/android" > 

      <translate 
       android:duration="900" 
       android:fromYDelta="0%" 
       android:toYDelta="80%" 
      /> 


     </set> 

slide_in_top는 :

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

<translate 
    android:duration="900" 
    android:fromYDelta="0%" 
    android:toYDelta="0%" /> 
</set> 

답변

0

그것은 오류가 귀하의 slide_in_top 애니메이션 파일처럼 나에게 보인다. 당신은 0 %에서 0 %로 갈 것입니다. 또는 다른 말로하면 전혀 움직이지 마십시오. 당신이 애니메이션을 원하지 않는 경우, 당신은 너무처럼 setCustomAnimations() 전화에 0을 지정할 수 있습니다

setCustomAnimations(0, R.anim.slide_out_bottom);

또한, 정신의 사랑, MainActivity에 getActivity 캐스팅 보관하지 마십시오. 대신에 이런 식으로 작업을 수행합니다

ProfileFragment pro = new ProfileFragment(); 

MainActivity main = (MainActivity) getActivity(); 

main.mFragmentStack.add(pro.toString()); 

main.fragmentManager.beginTransaction() 
    .setCustomAnimations(R.anim.slide_in_top, R.anim.slide_out_bottom) 
    .replace(R.id.fragment_swap,pro) 
    .addToBackStack(pro.toString()) 
    .commit(); 

당신은 또한 트랜잭션을 저장하기위한 MainActivity의 공용 필드 변수를 사용하여 재고 할 수 있습니다. 좋은 캡슐화가 아니며이 경우 불필요한 것처럼 보입니다. 확실히, mFragmentStack은 public으로 직접 액세스 할 수 없습니다. 접두어 m의 한 가지 의미는 사적인 것입니다.

+0

첫 번째 단편은 여전히 ​​사라집니다. – Samantha

+0

'replace()'명령을 사용하여'FragmentTransaction'을 사용하여 여기서 말하는 것을 할 수 있는지 궁금해지기 시작했습니다. 바꾸기, 이해할 수 있듯이, 'Fragments'와 함께 애니메이션을 수행 한 다음 원본 조각을 제거합니다. 두 번째'FrameLayout'에서 두 번째 프래그먼트의 첫 번째 프래그먼트를 'FrameLayout'에 넣은 다음 두 번째 프래임을 표시하기 위해 첫 번째 'FrameLayout' 전체를 아래쪽으로 애니메이션하는 것이 더 나을 것입니다. 조각이 제거되지 않는 방법입니다. – SDJMcHattie

+0

[documentation] (http://developer.android.com/reference/android/app/FragmentTransaction.html#replace (int, % 20andandroid.app.Fragment, % 20java.lang.String))을 읽으면 첫 번째 조각이'.remove()'를 호출하는지 확인한다. – SDJMcHattie

관련 문제