2014-12-18 3 views
4

저는 안드로이드 앱에 소개 화면을 보여주기 위해 viewpager를 구현했습니다. 거기에 다른 애니메이션을 가지고 4 가지 화면이 있습니다. 내 문제는 사용자가 viewpager의 0 조각에있을 때 조각 1이 기본적으로 초기화되고 애니메이션이 백그라운드에서 끝나고 사용자가 조각 1로 이동하면 애니메이션이 없음 (조각 1이 조각 1과 동시에 초기화 될 때 애니메이션이 종료 됨)입니다. 내가하고 싶은 일은 사용자가 조각 0에있을 때 단편 0 만 조각 1 인 다음 조각을 초기화하지 말아야한다는 것입니다. 사용자가 조각 1로 갈 때 조각 0은 조각 0으로 슬라이딩 할 때 파손되어야합니다. 애니메이션을 다시 표시하려면 초기화하십시오. 어떻게해야합니까?viewpager가 안드로이드에서 다음보기를 초기화하는 것을 방지하는 방법?

답변

0

당신은,

viewPager.setOffscreenPageLimit(0); 

deafult 1에 의해 왼쪽으로 메모리에 남아있을 것입니다 오른쪽으로 너무 한 조각 /보기 ViewPAger 페이지 메모리 제한을 변경할 수 있습니다.

뷰퍼는 성능이 좋고 부드럽고 즉시 스크롤 할 수 있도록 각면에 하나의 조각 /보기를 유지합니다. ViewPager에 대한 청취자를 생성하여 원하는 부분으로 스크롤하면 애니메이션이 실행되도록 제안합니다 (시작 애니메이션은 onCreateView). 특히 onPageSelected(int position) 방법, ViewPager.OnPageChangeListener 확인

편집 : 구글이 한계에 0을 설정하면 말한다 로그 캣 최신 버전으로, 약한 인정 :

Requested offscreen page limit 0 too small; defaulting to 1 

그래서 당신이 애니메이션을 발사하기위한 수신기를 사용해야합니다, 그것은을위한도 좋습니다 공연. 사용하려는 메소드가 작성자 (Google 자체)에 의해 사용되지 않음을 알 수 있습니다. ViewPager 클래스의 방법은

public void setOffscreenPageLimit(int limit) { 
    if (limit < DEFAULT_OFFSCREEN_PAGES) { 
     Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to " + 
       DEFAULT_OFFSCREEN_PAGES); 
     limit = DEFAULT_OFFSCREEN_PAGES; 
    } 
    if (limit != mOffscreenPageLimit) { 
     mOffscreenPageLimit = limit; 
     populate(); 
    } 
} 

당신은 또한

+0

나는 이것을 시도했다. 그것의 작동하지 않습니다 어댑터 = 새로운 ViewPagerAdapter (_activityWalkThrough, imageArra); view_pager_walk_through.setAdapter (어댑터); view_pager_walk_through.setOffscreenPageLimit (o); – rahul

+0

올바른지, 설정 0은 "사용되지 않음"입니다 (말합니다). 위의 편집을 참조하십시오. 원래의 ViewPager를 늘릴 수도 있지만, Google은 이유가 없으면이 0 제한 옵션을 차단하지 않았습니다. 나쁜 사례입니다. – snachmsm

+0

위에서 제시 한 제안을 시도해 보겠습니다. 감사합니다. – rahul

0

를 작동해야 다음 setOffscreenPageLimit(0);

Field f = ViewPager.class.getDeclaredField("DEFAULT_OFFSCREEN_PAGES"); 
f.setAccessible(true); 
f.setInt(viewPager, 0); 

처럼 매끄러운, 자신의 ViewPager을 만들거나 DEFAULT_OFFSCREEN_PAGES 또는 mOffscreenPageLimit 및 화재 populate(); 방법, 모든 사용 반사 변경 될 수 있습니다 당신 애니메이션을 시작하기 위해 액티비티에서와 같이 fragment call back onResume을 사용할 수 있습니다. 링크 : http://developer.android.com/reference/android/app/Fragment.html#onResume%28%29

+0

아니요, onResume은 offscreen 한도에있는 offscreen Fragments에 대해서도 호출됩니다. (적어도 1이면 onResume이 활동 시작 또는 생성/팽창시 3 분이 될 것입니다. 'ViewPager' 또는 시작 위치가 0 인 경우 두) – snachmsm

+0

다음을 사용하십시오. OnPageChangeListner 링크 : http : //developer.android.com/reference/android/support/v4/view/ViewPager.html#setOnPageChangeListener (android.support. v4.view.ViewPager.OnPageChangeListener) – Karioki

+0

내 솔루션에서 제안한이 솔루션. 또한 @rahul은 Reflections를 사용할 수도 있지만,이 문제를 해결하기 위해 권장되거나 적절한 방법은 아닙니다. – snachmsm

관련 문제