这里我们实现的是通过点击按钮来切换ViewPager,就是在ViewPager的底端我们定义一个
LinearLayout布局,在其中放置4个ImageView控件,我们可以通过点击不同的控件来切换ViewPager并改变
ImageView的状态。所以这里我们需要用到选择器。
首先在res文件夹下新建一个drawable文件夹,并在其中新建一个Selector类型的dot.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--
定义选中和未选中时的图片
icon01是灰色,可以接受触摸或点击事件
icon02是白色,不可以接受触摸或点击事件
-->
<item android:drawable="@drawable/icon01" android:state_enabled="true"></item>
<item android:drawable="@drawable/icon02" android:state_enabled="false"></item>
<!--
控件状态:
android:state_selected:选中或未选中
android:state_focused:获得焦点或未获得焦点
android:state_enabled:能否接受触摸或者点击事件
-->
</selector>然后是在activity_main.xml布局文件中引用我们定义的dot.xml文件<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:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:layout_weight="5" >
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_centerHorizontal="true"
android:layout_weight="1"
android:background="@android:color/holo_orange_light"
android:orientation="horizontal" >
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:src="@drawable/dot" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:src="@drawable/dot" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:src="@drawable/dot" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:src="@drawable/dot" />
</LinearLayout>
</LinearLayout>MainActivity的具体实现:package com.example.text_03;
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.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
private int[] images = new int[] { R.drawable.bd_logo1, R.drawable.them01,
R.drawable.them02, R.drawable.them03 };
// 存放图片资源的集合
private List<ImageView> data;
private ViewPager viewPager;
// 存储小圆点的集合
private ImageView[] icons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewpager);
// 调用初始化ImageView的方法
initData();
// 初始化小圆点的方法
initDot();
MyAdapter adapter = new MyAdapter();
viewPager.setAdapter(adapter);
// 给ViewPager添加页面切换事件
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
// 页面选中调用该方法
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
for (int i = 0; i < images.length; i++) {
icons[i].setEnabled(true);
}
icons[arg0].setEnabled(false);
}
// 页面滚动调用该方法
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
// 页面滚动过程中的状态
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
// 初始化ImageView
private void initData() {
data = new ArrayList<ImageView>();
for (int i = 0; i < images.length; i++) {
ImageView iv = new ImageView(this);
iv.setImageResource(images[i]);
data.add(iv);
}
}
// 初始化指示性图标
private void initDot() {
// 首先获得父控件,线性布局
LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
// 创建存储小圆点的数组变量
icons = new ImageView[images.length];
// 循环获得小圆点并初始化图片
for (int i = 0; i < icons.length; i++) {
// 通过索引获得线性布局中的每一个子控件,就是ImageView
icons[i] = (ImageView) layout.getChildAt(i);
// 设置状态为true,与dot.xml中的选择器相关联,并使用对应的图片加载到ImageView中
icons[i].setEnabled(true);
// 每个ImageView保存当前的索引值,0123
icons[i].setTag(i);
// 设置ImageView的点击事件
icons[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 设置ViewPager当前显示的页面,获得与icons[i]相同索引item(pager页面)
viewPager.setCurrentItem((Integer) v.getTag());
}
});
}
// 设置第一个为默认选中
icons[0].setEnabled(false);
}
class MyAdapter extends PagerAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(data.get(position));
return data.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView(data.get(position));
}
}
}运行结果:
另外是两种图片资源:第二个是白色的
版权声明:本文为kuangxiaoguo0123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。