2012-06-30 3 views
1

나는 덜 알려져있는 안드로이드의 ImageSwitcher을 사용하여 ImageView에서 이미지 변경을 활성화합니다. 현재, 특정 이벤트 (메인 스레드에서 모두 발생)에서 전환되는 2 개의 이미지 (기본 및 "ok"이미지)가 있습니다. 첫 번째 이미지는 페이드 아웃되고 두 번째 이미지는 페이드 인됩니다. ImageSwitcher가 작동하는 방식입니다. .ImageSwitcher가 처음 두 개의 이미지 전환 후 애니메이션되지 않음

처음 2 개의 애니메이션 (기본값에서 "ok"로 이동 한 다음 기본값으로 돌아갑니다)은 잘 사라집니다. 그런 다음 갑자기 이미지가 더 이상 흐려지지 않고 뷰가 즉시 두 번째 이미지로 전환되고 애니메이션이 두 번째 이미지의 두 오버레이 된 버전으로 흐릿 해집니다 (이미지는 반투명 한 검정색이며 두 번째 이미지가 거의 검은 색에서 정상으로 돌아 오는 방식).

// Initialization in onCreate(): 
mRefreshImageSwitcher = (ImageSwitcher) findViewById(R.id.main_refresh); 
mRefreshImageSwitcher.setFactory(new RefreshButtonViewFactory()); 
mRefreshImageSwitcher.setImageResource(R.drawable.refresh); 

// ... 

    mRefreshImageSwitcher.setInAnimation(getFadeAnimation(true, 300)); 
    mRefreshImageSwitcher.setOutAnimation(getFadeAnimation(false, 300)); 
    mRefreshImageSwitcher.setImageResource(R.drawable.refresh_ok); 

// ... 

private Animation getFadeAnimation(boolean in, long durationMillis) { 
    Animation a = AnimationUtils.loadAnimation(this, in ? android.R.anim.fade_in : android.R.anim.fade_out); 
    a.setDuration(durationMillis); 
    return a; 
} 

는 다른 방법으로, 나는 항상 같은 애니메이션 객체를 사용하는 것을 시도했다, 그러나 그것은 아무 것도 변경하지 않은 :

전환은 다음과 같이 구현됩니다.

동일한 이미지를 두 번 이상 설정하면 ImageSwitcher가 망가질 수 있습니까? 다른 아이디어?

답변

1

당신은 당신이 재구성하십시오 수 있습니다, 당신은 이벤트 내부의 이미지를 변경하지만 한 가지 당신이 늘 나는 그것을 얻지 않는다 애니메이션

+0

을 재생 mRefreshImageSwitcher.setImageResource()하지 mRefreshImageSwitcher.setBackgroundResource() 원인 설정 배경을 사용하고 있는지 확인하는 방법을 쓰고 있지 않은 대답? – manmal

+0

여기 내 코드는 에 있습니다. 만들기 'iSwitcher = (ImageSwitcher) findViewById (R.id.ImageSwitcher); \t \t iSwitcher.setFactory (this); \t \t iSwitcher.setInAnimation (AnimationUtils.loadAnimation (이, \t \t \t \t android.R.anim.fade_in)); \t \t iSwitcher.setOutAnimation (AnimationUtils.loadAnimation (이, \t \t \t \t android.R.anim.fade_out)); 공장에 대한 메이크업보기 @Override \t 공공보기 makeView() { \t \t 이미지 뷰의 iView = 새로운 이미지 뷰 (이); \t \t iView.setLayoutParams (새 ImageSwitcher.LayoutParams ( \t \t \t \t LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); \t \t return iView; \t}' –

관련 문제