20 ViewPager Demo3指示器

MainActivity.java

package com.qf.day20_viewpager_demo3;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class MainActivity extends Activity {
    private ViewPager viewPager;
    List<ImageView> list;
    private int[] imags = { R.drawable.txt_theme26, R.drawable.txt_theme29, R.drawable.txt_theme30 };

    // 指示器图片
    private ImageView[] icons;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.viewPager);

        // 数据源
        initData();

        // 获取指示器

        initIcon();

        // adapter
        MyAdapter adapter = new MyAdapter();
        viewPager.setAdapter(adapter);

        // setOnPageChangeListener
        // addOnPageChangeListener
        // ViewPager的监听事件
        viewPager.setOnPageChangeListener(new OnPageChangeListener() {

            /**
             * 当前界面被选中时调用 position:当前位置
             * 刚开始时此方法不会被回调
             */
            @Override
            public void onPageSelected(int position) {
                // TODO Auto-generated method stub
                // 首先把所有图片改成 一样的图片
                for (int i = 0; i < icons.length; i++) {
                    icons[i].setImageResource(R.drawable.icon01);
                }
                // 当前位置的图片 改成不一致的
                icons[position].setImageResource(R.drawable.icon02);
                Log.e("==", "==onPageSelected"+position);
            }

            /**
             * 界面滚动的回调方法 参数1:当前界面的下标 参数2:当前界面的滚动偏移量 参数3:当前界面滚动偏移量的像素值
             * 
             */
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub
                Log.e("==", "==onPageScrolled  参数1 "+arg0);
                Log.e("==", "==onPageScrolled  参数2 "+arg1);
                Log.e("==", "==onPageScrolled 参数3 "+arg2 );
            }

            /**
             * 当前界面滑动状态改变时调用 
             * SCROLL_STATE_IDLE 停止滑动 
             * SCROLL_STATE_SETTLING 当用户有自然滑动的时候调用 比如说向左滑动然后放手
             * 如果滑动的时候再回动回原来的位置不会触发 当然你能放回原位
             * SCROLL_STATE_DRAGGING 正在滑动的状态
             */
            @Override
            public void onPageScrollStateChanged(int arg0) {


            }
        });
    }

    // 初始化指示器
    public void initIcon() {
        // 获取指示器的父容器
        LinearLayout layout = (LinearLayout) findViewById(R.id.layout_id);
        icons = new ImageView[imags.length];
        for (int i = 0; i < icons.length; i++) {
            // icons[i] = (ImageView) layout.getChildAt(i);
            icons[i] = new ImageView(getApplicationContext());
            // 设置图片的布局大小 也可在此设定marging
            //使用的包为此元素在布局文件中的父元素
            LayoutParams params = new LayoutParams(20, 20);
            params.setMargins(0, 0, 20, 0);
            icons[i].setLayoutParams(params);

            // 容器里含有指示器
            layout.addView(icons[i]);

            icons[i].setImageResource(R.drawable.icon01);
            icons[i].setTag(i);// 保存当前位置
            icons[i].setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    // 滑动到指定的界面
                    // viewPager.setCurrentItem((Integer)v.getTag());
                    viewPager.setCurrentItem((Integer) v.getTag(), false);
                }
            });
        }
        // 设置第一个图片和其余图片不一致
        icons[0].setImageResource(R.drawable.icon02);
    }

    // 初始化数据源
    public void initData() {
        list = new ArrayList<ImageView>();
        for (int i = 0; i < imags.length; i++) {
            ImageView iv = new ImageView(getApplicationContext());
            iv.setImageResource(imags[i]);
            list.add(iv);
        }
    }

    public class MyAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // TODO Auto-generated method stub
            container.addView(list.get(position));
            return list.get(position);
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            // super.destroyItem(container, position, object);
            container.removeView(list.get(position));
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0 == arg1;
        }

    }

}

布局文件

<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/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></android.support.v4.view.ViewPager>

    <LinearLayout
        android:id="@+id/layout_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="49dp"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal" >

    </LinearLayout>

</RelativeLayout>
原文地址:https://www.cnblogs.com/muyuge/p/6152215.html