2012-02-13 37 views
5

Tất cả những gì tôi muốn làm là băng chuyền ngang trong Android.Làm thế nào để tạo băng chuyền ViewPager?

Nếu tôi có 3 màn hình AB và C sau đó tôi muốn ViewPager của tôi để cho phép tôi di chuyển như Một < -> B, B < -> C, C < -> A.

GTalk cho Cuộc trò chuyện của Android có thể được chuyển đổi như thế này. Màn hình chính và màn hình ứng dụng của Samsung có thể được chuyển đổi như thế này.

A B và C là các đoạn và tôi đang sử dụng bộ điều hợp mở rộng FragmentPagerAdapter. Tất cả các mảnh sẽ chứa một webview.

Tôi đã xem herehere và tại đây nhưng không ai trong số họ dường như đang làm những gì tôi muốn.

Có ai có thể hướng dẫn tôi đi đúng hướng không?

+0

Bạn có thể kiểm tra [hướng dẫn này] (http://thedeveloperworldisyours.com/android/carousel-viewpager/#sthash.rtkOS5m2.J9bGU21I .dpbs) và [ví dụ này trong GitHub] (https://github.com/thedeveloperworldisyours/CarouselViewPager) – Cabezas

Trả lời

0

Thực hiện getItem(int position) như thế này:

public Fragment getItem(int position) 
{ 
    switch(position) 
    { 
     case 0: 
     Fragment A = new A(); 
     return A; 
     case 1: 
     Fragment B = new B(); 
     return B; 
     same for C.... 
    } 
} 

bạn cũng có thể có một cái nhìn tại đây: SimpleViewPager .. tải về nguồn và hiểu nó. Hy vọng nó giúp.

+0

Tôi biết cách tạo một ViewPager. Tôi muốn biết làm thế nào để làm cho nó vòng lặp. Giống như màn hình a đến b b đến c c đến một lần nữa. – Enigma

+0

Xin lỗi, tôi nghĩ bạn hỏi về người xem. – Farhan

3

(Cross-đăng my answer từ một câu hỏi StackOverflow giống hệt nhau)

Một khả năng được thiết lập màn hình như thế này:

C 'ABCA'

C' trông giống như C, nhưng khi bạn di chuyển đến đó, nó chuyển bạn sang thực C. A 'trông giống như A, nhưng khi bạn cuộn đến đó, nó chuyển bạn sang thực A.

Tôi sẽ làm điều này bằng cách thực hiện onPageScrollStateChanged như vậy:

@Override 
public void onPageScrollStateChanged (int state) { 
    if (state == ViewPager.SCROLL_STATE_IDLE) { 
     int curr = viewPager.getCurrentItem(); 
     int lastReal = viewPager.getAdapter().getCount() - 2; 
     if (curr == 0) { 
      viewPager.setCurrentItem(lastReal, false); 
     } else if (curr > lastReal) { 
      viewPager.setCurrentItem(1, false); 
     } 
    } 
} 

Lưu ý rằng đây gọi là hình thức luân phiên của setCurrentItem và vượt qua false gây nhảy xảy ra ngay lập tức chứ không phải là một cuộn trơn tru.

Có hai nhược điểm chính mà tôi thấy. Thứ nhất, khi đạt đến một trong hai đầu người sử dụng phải để cho di chuyển giải quyết trước khi họ có thể đi xa hơn. Thứ hai, nó có nghĩa là có một bản sao thứ hai của tất cả các khung nhìn trong trang đầu tiên và trang cuối cùng của bạn. Tùy thuộc vào cách tài nguyên của bạn nặng màn hình, có thể loại trừ kỹ thuật này như là một giải pháp có thể. Cũng cần lưu ý rằng vì trình xem trang không cho phép các nhấp chuột đi qua các điều khiển cơ bản cho đến sau khi cuộn xong, có thể không thiết lập danh sách nhấp chuột và các loại tương tự cho đoạn A 'và C'.

Chỉnh sửa: Giờ đây đã tự thực hiện điều này, có một nhược điểm khá lớn khác. Khi nó chuyển từ A 'sang A hoặc C' sang C, màn hình sẽ nhấp nháy một lúc, ít nhất là trên thiết bị kiểm tra hiện tại của tôi.

+0

Tôi đã thử điều này rồi. Có những vấn đề khác. Nếu một số chế độ xem đã thay đổi trong A thì A' cũng phải phản ánh giống nhau. Giống như nếu bạn đã cuộn trong A và sau đó nếu bạn đi đến A' nó sẽ cho bạn thấy màn hình chưa được kiểm soát trong một giây và gây ra nhấp nháy một lần nữa. – Enigma

1

thiết lập ViewPager:

mViewPager = (ViewPager) findViewById(R.id.view_pager); 
    mViewPager.setAdapter(new YourPagerAdapter(getSupportFragmentManager())); 
    //Set the number of pages that should be retained to either side of the current page. 
    mViewPager.setOffscreenPageLimit(1); 
    mViewPager.setCurrentItem(50); 

FragmentPagerAdapter:

public class YourPagerAdapter extends FragmentPagerAdapter { 
    final int PAGE_COUNT = 100; 
    final int REAL_PAGE_COUNT = 3; 

    public YourPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     while (position > REAL_PAGE_COUNT - 1) { 
      position = position - REAL_PAGE_COUNT ; 
     } 

     switch (position) { 
      case 0: 
       return FirstFragment.newInstance(position); 
      case 1: 
       return SecondFragment.newInstance(position); 
      case 2: 
       return ThirdFragment.newInstance(position); 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    } 
} 
Các vấn đề liên quan