天天看点

Android ViewPager 中使用pagerAdapter

Viewpager 可以使视图滑动,就像Lanucher左右滑动那样。安卓3.0 才出现的特性。所以3.0以下使用,使用android-support-v4.jar  这个兼容包。

类似使用ListView 需要使用BaseAdapter 等适配器处理数据,使用ViewPager 也需要使用PagerAdapter 处理所要显示的视图。

官方文档说,使用ViewPager adapter 至少override 

public int getCount() //取得当前显示序列的数量。也就是有多少个View 要显示的。

public boolean isViewFromObject(View view, Object object) //判断view 与当前 object 是否相等。官方文档给出的写法是 return view == object; 至于object 是什么,等下说。

public Object instantiateItem(ViewGroup container, int position) //实例化view 。 所有viewpager 要显示的view,必须先container.addView() 加进container才能显示。position 就是当前的索引位置。

public void destroyItem(ViewGroup container, int position, Object object) //去掉container 中的view

这四个函数。

一下给出的demo:

Java代码:

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.Context;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.ColorFilter;

import android.graphics.Matrix;

import android.graphics.drawable.Drawable;

import android.graphics.drawable.DrawableContainer;

import android.os.Bundle;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.LayoutParams;

import android.util.DisplayMetrics;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

public class MainActivity extends Activity {

private ViewPager mPager;

    private ShowViewPager mPagerAdapter;

    private int currIndex;//当前页卡编号  

    private int bmpW;//横线图片宽度  

    private int offset;//图片移动的偏移量 

    private LayoutInflater inflater;

    private List<View> mListView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

mPager = (ViewPager) findViewById(R.id.viewpager);

initMyListView();

//给ViewPager设置适配器  

ShowViewPager showAdater = new ShowViewPager(mListView);

        mPager.setAdapter(showAdater);  

}

private void initMyListView(){

mListView = new ArrayList<View>();

LinearLayout lyout1 = (LinearLayout) inflater.inflate(R.layout.show_item1, null);

LinearLayout lyout2 = (LinearLayout) inflater.inflate(R.layout.show_item1, null);

LinearLayout lyout3 = (LinearLayout) inflater.inflate(R.layout.show_item1, null);

LinearLayout lyout4 = (LinearLayout) inflater.inflate(R.layout.show_item1, null);

LinearLayout lyout5 = (LinearLayout) inflater.inflate(R.layout.show_item1, null);

ImageView image2 =  (ImageView) lyout2.findViewById(R.id.image_view);

image2.setImageDrawable(getWallpaper());

mListView.add(lyout1);

mListView.add(lyout2);

mListView.add(lyout3);

mListView.add(lyout4);

mListView.add(lyout5);

}

class ShowViewPager extends PagerAdapter{

private List<View> mListView;

public ShowViewPager(List<View> mListView) {

this.mListView = mListView;

}

@Override

public int getCount() {

return mListView.size();

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

container.addView(mListView.get(position));

//notifyDataSetChanged();

return mListView.get(position);

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

//container.removeView(mListView.get(position));

container.removeView((View)object);

//notifyDataSetChanged();

}

@Override  

public int getItemPosition(Object object) {  

return super.getItemPosition(object);  

}

xml布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <FrameLayout 

        android:id="@+id/framelayout"

        android:layout_width="fill_parent"

    android:layout_height="200dp"

    android:orientation="vertical">

        <android.support.v4.view.ViewPager  

        android:id="@+id/viewpager"  

        android:layout_width="fill_parent"  

        android:layout_height="200dp"  

        android:flipInterval="30"  

        android:persistentDrawingCache="animation"

        android:background="#ff0"/>

    </FrameLayout>

    <ImageView 

        android:id="@+id/buttom_img"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

       />

</LinearLayout>

显示每个view 的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="200dp"

    android:layout_height="200dp"

    android:orientation="vertical" >

    <ImageView 

        android:id="@+id/image_view"

        android:layout_width="200dp"

        android:layout_height="200dp"

        android:src="@drawable/backgroup1"/>

    <ImageButton 

        android:id="@+id/img_btn"

        android:layout_width="200dp"

        android:layout_height="200dp"

        android:src="@drawable/ic_launcher"/>

</LinearLayout>

adapter 其实多点动手写,就会发现其实也不难用哒。

继续阅读