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