打开应用程序看到的滑动页面:滑动时无小圆点
1.在布局文件中加入ViewPager控件:
2.逻辑代码中:
findViewById 找到控件:android.support.v4.view.ViewPager
设置ViewPager的适配器
自定义适配器,继承自PagerAdapter: 注意要使程序在滑到最后一张时不崩溃需在适配器中destroyItem方法里注释掉调用父类的
创建一个整型数组存放图片,定义一个List<ImageView>类型的list
for循环将整型图片转成ImageView对象放在list里
布局文件:
<span style="font-size:18px;"><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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
</span>
逻辑代码文件:
<span style="font-size:18px;">package com.example.day20_viewpager;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class MainActivity extends Activity {
ViewPager vp;
int imgs[]={R.drawable.a1,R.drawable.a2,R.drawable.a3};
List<ImageView> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp=(ViewPager) findViewById(R.id.vp);
list=new ArrayList<ImageView>();
//将imgs转成ImageView对象,然后放在list中
for (int i = 0; i < imgs.length; i++) {
//得到ImageView对象
ImageView iv=new ImageView(MainActivity.this);
iv.setImageResource(imgs[i]);
list.add(iv);
}
MyAdapter adapter=new MyAdapter();
vp.setAdapter(adapter);
}
//自定义适配器
class MyAdapter extends PagerAdapter
{
//得到数据的总条数
@Override
public int getCount() {
return list.size();
}
//根据指定下标创建ViewPager展示的item视图
/*
* ViewGroup container:管理当前ViewPager的视图组
* int position:指定的下标
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
//将指定view对象存储到视图组中
container.addView(list.get(position));
return list.get(position);
}
//根据指定下标移除视图组中view对象
/*
* ViewGroup container:视图组
* int position:指定的下标
* Object object:instantiateItem返回的Object对象
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//要使滑到最后一张程序不崩,需注释掉此行
//super.destroyItem(container, position, object);
//从视图组中移除指定下标的view对象
container.removeView(list.get(position));
}
//表示当前ViewPager展示的view对象是否是instantiateItem创建的对象(即是否是同一对象)
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
}
}
</span>
不带标题的完整版如图:
在上面的基础上继续:
1.在第一个drawable下中创建一个selector标签的xml文件dot,将选中和未选中情况下显示的图片添加进来
<item android:state_enabled="true" android:drawable="@drawable/icon01"/>
<item android:state_enabled="false" android:drawable="@drawable/icon1"/>
2.布局文件中添加一个LinearLayout,给个id,在里面放3个ImageView控件,并将步骤1建的xml加进来
android:src="@drawable/dot"
3.逻辑代码中定义一个存放指示图片的ImageView的数组,然后把LinearLayout找出来,for循环遍历将指示图片放进数组里,并设置每个图片是否响应事件,及给其添加下标设置监听
4.给vp设置监听
在第一个drawable下中创建一个selector标签的xml文件dot:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_enabled="true"
android:drawable="@drawable/icon01"/>
<item
android:state_enabled="false"
android:drawable="@drawable/icon1"/>
<!--
state_enabled是否响应事件
state_selected:选中
state_focused: 焦点
state_pressed: 点击 -->
</selector>
布局文件:
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_alignParentBottom="true"
android:layout_marginBottom="70dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dot"
android:adjustViewBounds="true"
android:maxHeight="20dp"
android:layout_marginLeft="20dp"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dot"
android:adjustViewBounds="true"
android:maxHeight="20dp"
android:layout_marginLeft="10dp"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dot"
android:adjustViewBounds="true"
android:maxHeight="20dp"
android:layout_marginLeft="10dp"/>
</LinearLayout>
</RelativeLayout>
逻辑代码文件:
package com.example.day20_viewpager;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
ViewPager vp;
int imgs[]={R.drawable.a1,R.drawable.a2,R.drawable.a3};
List<ImageView> list;
//存放小圆点指示图片的数组
ImageView icons[]=new ImageView[imgs.length];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp=(ViewPager) findViewById(R.id.vp);
list=new ArrayList<ImageView>();
//将imgs转成ImageView对象,然后放在list中
for (int i = 0; i < imgs.length; i++) {
//得到ImageView对象
ImageView iv=new ImageView(MainActivity.this);
iv.setImageResource(imgs[i]);
list.add(iv);
}
MyAdapter adapter=new MyAdapter();
vp.setAdapter(adapter);
//初始化小圆点图片指示
init();
vp.setOnPageChangeListener(new OnPageChangeListener() {
//当前vp被选中时回调此方法
//int arg0:当前选中的下标
@Override
public void onPageSelected(int arg0) {
for (int i = 0; i < imgs.length; i++) {
icons[i].setEnabled(true);
}
//将当前下标的指示图片 选中
icons[arg0].setEnabled(false);
}
/**
* vp正在滑动时回调的方法
* int arg0:滚动viewpager的下标
* float arg1:滚动的偏移量[0,1]
* int arg2: 偏移量 像素
*
*/
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
/**
* 当前vp状态改变时回调
*
* SCROLL_STATE_DRAGGING:正在滑动的状态
* SCROLL_STATE_IDLE:静止状态
* SCROLL_STATE_SETTLING:选中的状态
*/
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
//自定义适配器
class MyAdapter extends PagerAdapter
{
//得到数据的总条数
@Override
public int getCount() {
return list.size();
}
//根据指定下标创建ViewPager展示的item视图
/*
* ViewGroup container:管理当前ViewPager的视图组
* int position:指定的下标
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
//将指定view对象存储到视图组中
container.addView(list.get(position));
return list.get(position);
}
//根据指定下标移除视图组中view对象
/*
* ViewGroup container:视图组
* int position:指定的下标
* Object object:instantiateItem返回的Object对象
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//要使滑到最后一张程序不崩,需注释掉此行
//super.destroyItem(container, position, object);
//从视图组中移除指定下标的view对象
container.removeView(list.get(position));
}
//表示当前ViewPager展示的view对象是否是instantiateItem创建的对象(即是否是同一对象)
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
}
public void init()
{
LinearLayout layout=(LinearLayout) findViewById(R.id.layout);
for (int i = 0; i < icons.length; i++) {
//将布局中的指示图片放进数组里
icons[i]=(ImageView) layout.getChildAt(i);
//设置是否响应事件
icons[i].setEnabled(true);
//给指示图片添加下标
icons[i].setTag(i);
icons[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
vp.setCurrentItem((Integer) v.getTag());
}
});
icons[0].setEnabled(true);
}
}
}