Android初学之ViewPager

来源:互联网 发布:淘宝卖家网页制作 编辑:程序博客网 时间:2024/05/16 12:58

作为一个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
原创粉丝点击