2013-01-31 4 views
1

Google지도로드 지연 (Maps v2)을 위해 스플래시 화면을 사용하려고합니다.postDelayed 사용시 AnimationListener의 onAnimationEnd가 실행되지 않습니다.

나는 몇 초 후에 페이드 아웃하고 숨길 onAnimationEnd를 오버라이드 (override) 할 수 있어야하는 FrameLayoutImageView를 사용하려면 시작 화면의 ImageView.

지연없이 애니메이션을 시작할 때, onAnimationEnd는 적절하게 호출되는 :

new Animations().animateAlphaForLayout(splashLayout, 2000); 

나는 onAnimationEnd 전혀 호출되지 않습니다 postDelayed와 애니메이션을 시작하려고하면 문제는 :

splashLayout.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     new Animations().animateAlphaForLayout(splashLayout, 2000); 
    } 

}, 3000); 

Animations 클래스 코드는 다음과 같습니다.

Android 2.3 이상 (API 10 이상)에서이 작업을 수행하는 방법을 아는 사람이 있습니까?

감사합니다.

+0

이 Runnable을 게시하고있는 핸들러와 그 핸들러는 무엇을하고 있습니까? 해당 Handler가 기본 UI 스레드이고 바쁜 경우 요청을 처리 할 수있는 기회를 얻지 못합니다. –

+0

잠시 기다려주세요.보기에 게시하고 있으므로 기본 UI 스레드에 게시하고 있습니다. 그렇다면 주 UI 스레드는 무엇을합니까? –

+0

예 게시를 위해보기를 사용하고 있는데 애니메이션이 작동하기 때문에 요청이 처리 중입니다. 작동하지 않는 유일한 방법은 수신기의 'onAnimationEnd'입니다. 인터페이스 스레드에서 난 그냥 SupportMapFragment 표시합니다. –

답변

1

내가 원하는 결과를 얻을 간단한 해결 방법은 (즉, 몇 초 동안 ImageView을 보여 다음 GONE에 그것을 페이드 아웃 및 설정하는 것입니다) :

postDelayed 때문에 내 이전 시도에서 범인이었다, 나는 AnimationsetStartOffset(startOffset)을 사용하여 그것을 떨어 뜨렸다.

즉, 처음에는 postDelayed에 사용한 간격으로 애니메이션이 시작되는 것을 지연 시켰습니다. 난 아직도 왜 postDelayed 애니메이션의 수신기를 엉망 몰라요.

+0

흥미 롭습니다. 업데이트 주셔서 감사합니다! –

0

LinearLayouts를 중첩 시켰으며 하나는 parentHolder이고 다른 하나는 parentHolder 내부의 menuHolder입니다. 학부모 소유자의 손이 닿지 않으면 안쪽을 숨 깁니다.

package com.fmc.component; 

import com.fmc.marketing.tanitim.R; 
import android.view.animation.AlphaAnimation; 
import android.view.animation.Animation; 
import android.view.animation.Animation.AnimationListener; 
import android.view.animation.AnimationSet; 
import android.widget.LinearLayout; 

public class NavigatorTest { 

public void AnimeEt(LinearLayout llParentHolder) { 
    final LinearLayout llHolder = (LinearLayout) llParentHolder.findViewById(R.id.llHolder); 
    AnimationSet aset = new AnimationSet(true); 
    AlphaAnimation alpha = new AlphaAnimation(1, 0); 
    alpha.setStartOffset(500); 
    alpha.setDuration(1000); 
    aset.addAnimation(alpha); 
    alpha.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      llHolder.setVisibility(LinearLayout.GONE); 
     } 
    }); 
    llHolder.startAnimation(aset); 
} 

}

0

사람이 여전히이 문제가 발생하고 있지만 나 같은 유래 answers-을 많이 읽고 -even 해결책을 찾을 수 없습니다 수 있습니다!

그래서 내 경우가 있었다 : 나는 animatorSet 그리고 난에 clearAnimation를 호출 할 수있는 단일 뷰가 없었다

, 내가, 당신이 그렇게해서는 안 - 어떤 backgroundThread에서 내 애니메이션을 호출되지 않은 사용 btw- 해결책으로 animatorSet.start() 바로 전에 animatorSet.end()를 호출했습니다.