Android初学之ViewPager

作为一个android的小菜鸟,第一次写微博总是有点小忐忑的,今天看项目的源代码时,对ViewPager控件比较感兴趣,便查了点资料自己写了一个十分简单的demo。

ViewPager作为一个ViewGroup的扩展,他的实现有点类似于ListView控件,我自己喜欢把这类的控件叫做AdapterView,就是需要适配器的View。

接下来,我们就来看一下这类控件实现的基本步骤,当然这里我还没有能力从源码的角度去解释整个控件的运行。


  1. AdapterView(需要适配器的View)一般都具有三个要素:1)控件本身,本文就是ViewPager 2)与之匹配的适配器adapter 3)控件所需要展示的数据(包含数据和布局,统称为数据)

  2. adapter就像一个连接ViewPager和数据的桥梁,他的实现是ViewPager功能有效执行的关键。所以,在定义自己需要的adapter的时候需要注意两个方面:1)如何与ViewPager联系起来(一般这种面向控件的操作十分简单,直接调用ViewPager的setAdapter()方法) 2)如何与数据层联系起来:这里就需要根据自己的需求去定义UI布局和数据,然后将定义好的数据传给adapter

  3. 数据的形式应该是怎么样的?对于AdapterView来说,每一项的布局应该是完全一样的,但是其中展现的数据可能不一样,但数据类型在整体上来说肯定是一样的。所以在这里用ArrayList< View >十分恰当,可以在adapter的实现中,定义一个ArrayList< View >类型的成员,用来保存所要展示的数据(UI布局和数据)。显然在这里,View = 数据+布局。


  1. MainActivity代码:

package com.example.administrator.mylinkedviewpager;

import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;

import com.example.administrator.myadapter.ViewPagerAdapter;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ViewPager vp;
    private List<View> views = new ArrayList<View>();
    private ViewPagerAdapter vpAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
    }

    public void initViews(){
        LayoutInflater inflater = LayoutInflater.from(this);
        View view1 = inflater.inflate(R.layout.guide, null);
        initView(view1,R.drawable.guide_1);
        views.add(view1);
        View view2 = inflater.inflate(R.layout.guide, null);
        initView(view2,R.drawable.guide_2);
        views.add(view2);
        View view3 = inflater.inflate(R.layout.guide, null);
        initView(view3,R.drawable.guide_3);
        views.add(view3);

        vp = (ViewPager)findViewById(R.id.viewPager);
        vpAdapter = new ViewPagerAdapter(views,this);
        vp.setAdapter(vpAdapter);
    }

    public void initView(View view,int drawable){
        ImageView imgView = (ImageView)view.findViewById(R.id.imgView);
        imgView.setImageResource(drawable);
    }
}

2.适配器代码:

package com.example.administrator.myadapter;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;

import java.util.List;

/**
 * Created by zhouyoudade on 2016/7/19 0019.
 */
public class ViewPagerAdapter extends PagerAdapter {


    private List<View> views;
    private Context context;

    public ViewPagerAdapter(List<View> views, Context context) {
        this.views = views;
        this.context = context;
    }

    @Override
    public void destroyItem(View container, int position, Object object) {
        ((ViewPager)container).removeView(views.get(position));
    }

    @Override
    public Object instantiateItem(View container, int position) {
        ((ViewPager)container).addView(views.get(position));
        return views.get(position);
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view == object);
    }
}

3.布局文件:

---------------------guide.xml---------------------------
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imgView"/>
</RelativeLayout>

--------------activity_main.xml--------------------------

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/viewPager">

    </android.support.v4.view.ViewPager>
</RelativeLayout>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值