2012-07-28 3 views
8

뷰 호출기를 자동 슬라이드 또는 자동 페이지로 만들 수 있습니까? 나는 내 viewpager는 아래와 같이 어댑터를 사용하도록 설정하고 그것을 잘 작동했다 : -자동 안드로이드 사용법 호출기보기

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.gridslide); 
ImagePagerAdapter mAdapter = new ImagePagerAdapter(
     getSupportFragmentManager(),4); 
ViewPager mPager = (ViewPager) findViewById(R.id.pager); 
mPager.setAdapter(mAdapter); 
} 

그리고 어댑터는 같은 다음과 같습니다 : - 내가 원하는 것 그러나

public static class ImagePagerAdapter extends FragmentStatePagerAdapter { 
private final int mSize; 

public ImagePagerAdapter(FragmentManager fm, int size) { 
    super(fm); 
    mSize = size; 
} 

@Override 
public int getCount() { 
    return mSize; 
} 
@Override 
public Fragment getItem(int position) { 
    Log.v(TAG,"position="+position); 
    return TheFragment.newInstance(position); 
}} 

만드는 방법을 알고 이 조각들은 뷰 페이지에서 자동 스크롤됩니다.

+0

슬라이드 애니메이션을 원하십니까? – sandrstar

+1

@sandrstar 글쎄, 나도 그렇게 말할 수는 없다 :-) – Rasmus

+0

https://github.com/ajaydewari/AutoSlideViewpager – HAXM

답변

12

setCurrentItem (int item, boolean smoothScroll)에서 smoothScroll = true로 설정할 때 항상 부드러운 스크롤 효과가있는 것은 아닙니다. 뷰어 페이지가 5 페이지 미만인 경우 부드러운 스크롤을 거의 느끼지 못할 것입니다. 이 시나리오에서는

, 그것은 어떤 하나 더 느린 스크롤을 필요로하는 경우 루프

//This will scroll page-by-page so that you can view scroll happening 
for (int i = 0; i < mAdapter.getCount()-1; i++) 
    mPager.setCurrentItem(i, true); 

의에 넣어하는 것입니다 할 수있는 어려운 방법, 그들은 ...

다음과 같이 postDelayed()를 사용할 수 있습니다
static int i=0; 
private final Handler handler = new Handler(); 
somefunction() 
{ 
    handle.post(ViewPagerVisibleScroll); 
} 

    Runnable ViewPagerVisibleScroll= new Runnable() { 
       @Override 
       public void run() { 
        if(i <= mAdapter.getCount()-1) 
        { 
         mPager.setCurrentItem(i, true); 
         handle.postDelayed(TopChartAnimation, 100); 
         i++; 
        } 
       } 
      }; 

수면은 항상 권장되지 않습니다 : 어떤 하나 더 느린 스크롤을 필요로하는 경우, 그들은 루프이에 잠을 사용할 수 있습니다 ...

+4

틀림없이 UI 스레드에서 잠은 나쁜 생각입니다. 대신 postDelayed()를 사용하는 것이 좋습니다. – sandrstar

+1

@sandrstar 네, 귀하의 제안을 수락합니다. Thread.sleep()을 제거하여 코드를 다시 편집했습니다. – Raghu

+0

둘 다 메모리 누수가 발생합니다. – Ungoogleable

11

아마도 드래그 시뮬레이션을 원한다면 ViewPager.beginFakeDrag(), ViewPager. fakeDragBy(float offset)ViewPager.endFakeDrag()의 API를 살펴 봐야합니다. 또한 setCurrentItem() API는 현재 페이지를 설정하고 원활하게 수행 할 수있는 기능을 제공합니다. 슬라이드를 자동으로 만들 것을 제안 할 수있는 가장 간단한 방법은 간단한 Runnable과 함께 Handler을 설정하여 활동의 항목을 설정하기 위해 호출기 메서드를 호출하고 postDelayed()를 호출하는 것입니다. 그리고 사용자 상호 작용 또는 예를 들어, 사용자가 상호 작용할 때 removeCallbacks()를 호출하는 것을 잊지 마십시오. 활동 중지.

+0

콜백을 제거하면 무슨 뜻입니까? 어떻게 실행 파일을 제거 할 수 있습니까? – Shruti

+0

여기에 http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29와 같은 removeCallbacks가 있습니다. 핸들러에 대한 예약 된 Runnable 실행을 취소 할 수있는 기능을 제공합니다. – sandrstar