Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> ViewPager全面解析

ViewPager全面解析

編輯:關於Android編程

寫在前面:
最近發現,對一些基本用法,隔一段時間不用又會無從下手。因此,慢慢養成了寫總結博客的習慣,一方面加深印象理清知識點,另一方面,把自己的學習總結分享給大家。

一、ViewPager的基本使用

1、ViewPager是什麼?
ViewPager繼承自ViewGroup,也是一個容器類。實際上是一個view的管理器,實現左右滑動的功能。通常我們需要ViewPager+adapter實現左右滑動功能。

2、一個簡單的ViewPager Demo
(1)首先ViewPager的xml布局:activity_main.xml。這樣就定義好了容納view的容器。注意ViewPager引入時需要寫完整的包名android.support.v4.view.ViewPager.




    

(2)准備數據源——待左右滑動顯示的view們。我這裡只是簡單放了三個圖片。

List getViews(){
        List views = new ArrayList<>();

        ImageView imageView = new ImageView(this);
        imageView.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.morning));
        views.add(imageView);

        ImageView imageView1 = new ImageView(this);
        imageView1.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.afternoon));
        views.add(imageView1);

        ImageView imageView2 = new ImageView(this);
        imageView2.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.night));
        views.add(imageView2);

        return views;
    }

(3)實現自定義Adapter,一般采用繼承自PagerAdapter。
PagerAdapter是一個抽象類,是將待顯示views顯示到ViewPager中的橋梁。有興趣的話可以查看一下PagerAdapter源碼,PagerAdapter一系列方法的調用最終表現為頁面的切換,startUpdate()方法(意味著ViewPager內容即將改變)→instantiateItem()方法(頁面填充和初始化)→destroyItem()(移除view)。
一般而言,實現ViewAdapter至少需要實現4中方法:

 /**
     * 待顯示views的數目
     * @return
     */
    @Override
    public int getCount() {
        return 0;
    }

    /**
     * 把待顯示view添加到viewpager中,進行初始化操作。一般返回view本身(其實只要返回view的標識就好了)
     * @param container
     * @param position
     * @return
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        return super.instantiateItem(container, position);
    }

    /**
     * 移除view
     * @param container
     * @param position
     * @param object
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);
    }

    /**
     * 判斷視圖是否與給定的key(參數中的object)相一致。viewpager使用key對每個頁面進行管理,其實我們在instantiateItem中返回的就是這個key,如果instantiateItem返回的是view,只要判斷view和key是否相等就好了
     * @param view
     * @param object
     * @return
     */
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return false;
    }

下面是我的一個簡單實現:

public class MyViewPagerAdapter extends PagerAdapter {

    List views = null;

    public MyViewPagerAdapter(List views) {
        //把待顯示的view們傳遞進來
        this.views = views;
    }

    /**
     * 初始化指定位置頁面  需要返回頁面的唯一標識(通常情況下返回view本身)
     * @param container
     * @param position
     * @return
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //把當前要顯示的view添加到viewPager中
        container.addView(views.get(position));
        return views.get(position);
    }

    @Override
    public int getCount() {
        return views.size();
    }

    /**
     * 負責移除指定位置的view
     * @param container
     * @param position
     * @param object
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(views.get(position));
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        //由於前面返回的view本身作為view標識,這裡直接判斷是否相等就好了
        return view == object;
    }
}

接下來看一下MainActivity.java的代碼,就能實現view左右滑動的功能。

這裡寫代碼片public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewPager = (ViewPager)findViewById(R.id.myviewpager);

        viewPager.setAdapter(new MyViewPagerAdapter(getViews()));


    }

    List getViews(){
        List views = new ArrayList<>();

        ImageView imageView = new ImageView(this);
        imageView.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.morning));
        views.add(imageView);

        ImageView imageView1 = new ImageView(this);
        imageView1.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.afternoon));
        views.add(imageView1);

        ImageView imageView2 = new ImageView(this);
        imageView2.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.night));
        views.add(imageView2);

        return views;
    }
}

以上是viewPager的最簡單的應用。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved