概述
ViewPager并不在android的官方包中,而在第三方jar包support.V4.jar中。写一个pagerview同样要用到自定义adapter,继承于pagerAdapter。adapter中需要实现四个方法:destroyItem(ViewGroup container, int position, Object object)、getCount()、instantiateItem(ViewGroup container, int position)、isViewFromObject(View arg0, Object arg1)。
内容
主活动
public class MainActivity extends Activity {
private ViewPager mViewPager;
private LayoutInflater mInflater;
private View view1;
private View view2;
private View view3;
private List<View> mViews;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager)findViewById(R.id.viewPager);
mViews = new ArrayList<>();
mInflater = getLayoutInflater();
view1 = mInflater.inflate(R.layout.newpager1, null);
view2 = mInflater.inflate(R.layout.newpager2, null);
view3 = mInflater.inflate(R.layout.newpager3, null);
mViews.add(view1);
mViews.add(view2);
mViews.add(view3);
MyPagerAdapter adapter = new MyPagerAdapter(mViews);
mViewPager.setAdapter(adapter);
}
}
public class MyPagerAdapter extends PagerAdapter{
private List<View> mViews;
public MyPagerAdapter(List<View> mViews) {
super();
this.mViews = mViews;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mViews.get(position));
}
@Override
public int getCount() {
return mViews.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = mViews.get(position);
container.addView(view);
if(position==1){
Button button = (Button) view.findViewById(R.id.button_pager);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"点击按钮", Toast.LENGTH_SHORT).show();
//v.getContext()得到活动
}
});
}
return view;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
}
布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#88ff88"
android:gravity="center"
android:orientation="vertical"
tools:context="com.chu.helloworld.MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
newpager1
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/dog"/>
</LinearLayout>
newpager2
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button android:id="@+id/button_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="button"
android:gravity="center"/>
</LinearLayout>
newpager3
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"
android:text="我是第三页"/>
</LinearLayout>
结果演示:
pagerTabStrip、注位点、和伪循环滑动的添加:
常用方法有:
setBackgroundColor():设置背景色;
setTabIndicatorColor:设置tabIndicator的颜色;
setTextColor:设置文本颜色。
布局文件activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#88ff88"
android:gravity="center"
tools:context="com.chu.helloworld.MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.PagerTabStrip
android:id="@+id/pager_tap_tripe"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/linearlayout_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_alignParentBottom="true">
</LinearLayout>
</RelativeLayout>
MainActivity中需要修改一些地方地方:
MainActivity:
package com.chu.helloworld;
import java.util.ArrayList;
import java.util.List;
import com.chu.helloworld.adapter.MyPagerAdapter;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.provider.Settings.SettingNotFoundException;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
private ViewPager mViewPager;
private LayoutInflater mInflater;
private View view1;
private View view2;
private View view3;
private List<View> mViews;
private LinearLayout mLinearLayoutContainer;
private List<ImageView> mPoints;
private PagerTabStrip mPagerTabTrip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager)findViewById(R.id.viewPager);
mViews = new ArrayList<>();
mInflater = getLayoutInflater();
view1 = mInflater.inflate(R.layout.newpager1, null);
view2 = mInflater.inflate(R.layout.newpager2, null);
view3 = mInflater.inflate(R.layout.newpager3, null);
mLinearLayoutContainer = (LinearLayout) findViewById(R.id.linearlayout_container);
mPoints = new ArrayList<>();
mPagerTabTrip = (PagerTabStrip) findViewById(R.id.pager_tap_tripe);
mPagerTabTrip.setBackgroundColor(Color.BLUE);
mPagerTabTrip.setTabIndicatorColor(Color.CYAN);
mPagerTabTrip.setTextColor(Color.LTGRAY);
mViews.add(view1);
mViews.add(view2);
mViews.add(view3);
for(int i=0;i<mViews.size();i++){
ImageView iv = new ImageView(this);
iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
iv.setPadding(7, 7, 7, 7);
iv.setImageResource(R.drawable.point_normal);
mPoints.add(iv);
mLinearLayoutContainer.addView(iv);
}
mPoints.get(0).setImageResource(R.drawable.point_select);
MyPagerAdapter adapter = new MyPagerAdapter(mViews);
mViewPager.setAdapter(adapter);
mViewPager.addOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
for(ImageView iv:mPoints){
iv.setImageResource(R.drawable.point_normal);
}
mPoints.get(arg0%mViews.size()).setImageResource(R.drawable.point_select);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
mViewPager.setCurrentItem(Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%mViews.size());
}
}
MyPagerAdapter中也有改变
package com.chu.helloworld.adapter;
import java.util.List;
import com.chu.helloworld.R;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
public class MyPagerAdapter extends PagerAdapter{
private List<View> mViews;
private String titles[] = {"页面1","页面2","页面3"};
public MyPagerAdapter(List<View> mViews) {
this.mViews = mViews;
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position%titles.length];
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//container.removeView(mViews.get(position));
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = mViews.get(position%mViews.size());
if(view.getParent()!=null){
container.removeView(view);
}
container.addView(view);
if(position%mViews.size()==1){
Button button = (Button) view.findViewById(R.id.button_pager);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"点击按钮", Toast.LENGTH_SHORT).show();
//v.getContext()得到活动
}
});
}
return view;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
}
结果演示: