天天看點

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 其實多點動手寫,就會發現其實也不難用哒。

繼續閱讀