2013-05-11 2 views
0

2 개의 조각을 유지하는 주요 활동이 있습니다.응용 프로그램이 시작될 때 애니메이션이 표시되지 않습니다.

첫 번째 조각에서 나는 주 활동에서 애니메이션을 호출합니다.

내가 그것을 애니메이션 버튼에서 호출하고 난 자동으로 전화를하려고하면 모든

확인하는 경우 (같은 (X> 3) 애니메이션() 경우) 모두에서 애니메이션을 표시하지 않고 또한 버튼을 누르면 애니메이션이 계속 표시되지 않습니다. 코드는 로그 메시지가 표시된되어 내가 그런데

public Child(MainActivity p) { 
    this.parent = p; 
} 

public void showAnimation() 
{ 
    AnimationSet as = new AnimationSet(true); 

    Animation up = AnimationUtils.loadAnimation(this.getBaseContext(), R.anim.slide_up); 
    up.setStartOffset(2000); 
    Animation down = AnimationUtils.loadAnimation(this.getBaseContext(), R.anim.slide_down); 
    down.setStartOffset(6000); 
    as.addAnimation(up); 
    as.addAnimation(down); 

    Log.v("FFF","ok"); 
    test.setVisibility(View.VISIBLE); 
    test.startAnimation(as); 
    test.setVisibility(View.GONE); 

} 

아이

if(!settings.getBoolean(BADGE_D7, false)){ 
     if (days >= 7){ 
      days7.setImageResource(R.drawable.days7); 
      Log.v("FFF","done"); 
      parent.showAnimation(); 
     } 
    } 

부모

이하와 아이의 생성자에 유일한 문제는 애니메이션입니다. 문제가 무엇입니까 ??

+0

UI 스레드에서 showAnimation()을 실행하고 있는지 확인하십시오. – GreyBeardedGeek

+0

동일한 parent.showAnimation() 버튼을 사용하고 잘 작동합니다. 자동으로 애니메이션을 적용 할 때만 적용됩니다./ 어쩌면 모든 요소가 자신의 자리에 있고 애니메이션 후에 수행 될 때까지 기다려야 할 수도 있지만 정확히 어떻게 수행해야할지 모릅니다. –

답변

0

글쎄, 좀 솔루션을 발견, 최선은 아니지만 작동합니다.

먼저 모든 코드를 하위 활동에 넣고 거기에서 사용합니다. 나는 아이에서 텍스트 뷰를 액세스하고 나는 treeObserver

test = (TextView) parent.findViewById(R.id.test1); 
    ViewTreeObserver vto = test.getViewTreeObserver(); 
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
      @Override 
      public boolean onPreDraw() { 
       ready = true; 
       return true; 
      } 
     }); 

을 추가하고 나는이 같은 showAnimation() 편집 한 다음 텍스트 뷰가 자리에없는 동안은에 stucks 그래서

public void showAnimation() 
{ 
    as = new AnimationSet(true); 

    Animation up = AnimationUtils.loadAnimation(this.getActivity(), R.anim.slide_up); 
    Animation down = AnimationUtils.loadAnimation(this.getActivity(), R.anim.slide_down); 
    down.setStartOffset(4000); 
    as.addAnimation(up); 
    as.addAnimation(down); 

    Log.v("FFF","ok"); 
    while(!ready){} //Added this line 
    test.setVisibility(View.VISIBLE); 
    test.startAnimation(as); 
    test.setVisibility(View.GONE); 

} 

을 모든 것이 괜찮을 때까지 반복하십시오.

+0

showAnimation()을 호출 할 때 나에게 명확하지 않습니다. 나는 당신이 활동의 ​​onCreate 메서드에서 일찍 전화하고 있다고 생각하고 있습니까? onResume()에서와 같이 나중에 Activity/Fragment 라이프 사이클에서 호출 해보십시오. 그런 다음 ViewTreeObserver가 필요하지 않습니다. – GreyBeardedGeek

+0

예, 나는 onCreate()에서 호출하고있었습니다. 이제 작동하고, 나는 무엇이 일어날지를보기 위해 onResume을 넣으려고 노력할 것입니다. –

0

필자는 내 레이아웃의 끝에서 형제 위의 Z 색인을 유지한다고 선언 한 견해를 가졌습니다. 애니메이션 작업을하려면 페이지를 터치해야했습니다.

그래서 Java를 통해 Z 색인을 다시 설정하면 효과가 있습니다.

view.bringToFront(); 
관련 문제