ViewPager

来源:互联网 发布:怎么申请淘宝主播 编辑:程序博客网 时间:2024/06/05 04:10

ViewPager控件, android3.0以后才有的. 特点: 预加载功能.

1.预加载左右两边的图片.

2.如果发现左边图片的索引是负数, 小于0, 就不会预加载.

3如果发现右边的图片是索引是大于等于总item的个数.  item: 2,  当前显示的是: 1

4无限循环---利用取模

android-support-v4.jar的源码位置:

sdk\extras\android\support\v4\src\java\android\support\v4\view\PagerAdapter.java

package com.myhome;import android.app.Activity;import android.os.Bundle;import android.os.SystemClock;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Created by HQ on 2015/12/16. * --------- 日期 ------- 维护人 ------------ 变更内容 -------- *           HQ    新增Person类 *           HQ    增加sex属性 */public class MainActivity extends Activity implements ViewPager.OnPageChangeListener {    private static final String TAG = "MainActivity";    private List<ImageView> imageViewList;    private MyAdapter adapter;    private ViewPager mViewPager;    private TextView tv_description;    private LinearLayout ll_point;    private String[] imageDescription;    private int prevPoint = 0; //当前页面前一个点    boolean flag = false;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        new Thread(){            @Override            public void run() {                SystemClock.sleep(3000);                while(!flag){                runOnUiThread(new Runnable() {                    @Override                    public void run() {                    mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1);                    }                });                    SystemClock.sleep(3000);                }            }        }.start();    }    @Override    protected void onDestroy() {        super.onDestroy();        flag = true;    }    private void initView() {        mViewPager = (ViewPager) findViewById(R.id.viewpager);        tv_description = (TextView) findViewById(R.id.tv_description);        ll_point = (LinearLayout) findViewById(R.id.ll_point);        initData();        adapter = new MyAdapter();        mViewPager.setAdapter(adapter);        mViewPager.setOnPageChangeListener(this);        //设置mor选中的点和图片对应的信息        prevPoint = 0;        ll_point.getChildAt(prevPoint).setEnabled(true);        tv_description.setText(imageDescription[prevPoint]);        //把ViewPager设置为mor选中Integer.MAX_VALUE/2        int m = (Integer.MAX_VALUE/2)%imageViewList.size();        int currentPosition = Integer.MAX_VALUE/2-m;        mViewPager.setCurrentItem(currentPosition);    }    private void initData() {        imageDescription = new String[]{          "我是描述信息一.",          "我是描述信息二...",          "我是描述信息三....",          "我是描述信息四....",          "我是描述信息五......"        };        int[] imageResIDs ={                R.drawable.a,                R.drawable.b,                R.drawable.c,                R.drawable.d,                R.drawable.e,        };        imageViewList = new ArrayList<>();        ImageView iv;        View v;        LinearLayout.LayoutParams params;        for (int i = 0;i<imageResIDs.length;i++){            iv = new ImageView(this);            iv.setBackgroundResource(imageResIDs[i]);            //每次循环需要向LinearLayout中添加一个View对象            v = new View(this);            v.setBackgroundResource(R.drawable.point_bg);            params = new LinearLayout.LayoutParams(10,10);            if (i != 0){                //当前不是第一个点需要设置左边距                params.leftMargin = 5;            }            v.setLayoutParams(params);            v.setEnabled(false);            imageViewList.add(iv);            ll_point.addView(v);        }    }    /**     * 当页面滑动的时候调用此方法     * @param position     * @param positionOffset     * @param positionOffsetPixels     */    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }    /**     * 当页面被选中时调用此方法     * @param position 当前被选中的页面的索引     */    @Override    public void onPageSelected(int position) {        int newPosition = position%imageViewList.size();        //把当前选中的点给切换了,还有描述信息        ll_point.getChildAt(prevPoint).setEnabled(false);        //ll_point.getChildAt(position).setEnabled(true);        ll_point.getChildAt(newPosition).setEnabled(true);        //tv_description.setText(imageDescription[position]);        tv_description.setText(imageDescription[newPosition]);        //把前一个的索引赋值给前一个索引变量,方便下一次再切换.        //prevPoint = position;        prevPoint = newPosition;    }    /**     * 当页面的状态发生改变调用的方法     * @param state     */    @Override    public void onPageScrollStateChanged(int state) {    }    private class MyAdapter extends PagerAdapter{        /**         * 返回的int值,会作为ViewPager的总长度来使用         * @return         */        @Override        public int getCount() {            return Integer.MAX_VALUE;        }        /**         * 判断是否使用缓存,如果返回的是true,使用缓存,不去调用instantiateItem方法创建一个新的对象         * @param view         * @param object         * @return         */        @Override        public boolean isViewFromObject(View view, Object object) {            return view == object;        }        /**         * 初始化一个条目         * @param container         * @param position 就是当前需要加载条目的索引         * @return         */        @Override        public Object instantiateItem(ViewGroup container, int position) {            //把position对应位置的ImageView添加到ViewPager中            //ImageView imageView = imageViewList.get(position);            ImageView imageView = imageViewList.get(position%imageViewList.size());            mViewPager.addView(imageView);            //把当前添加ImageView返回回去            return imageView;        }        /**         * 销毁一个条目         * @param container         * @param position 就是当前需要销毁条目的索引         * @param object         */        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            //把ImageView从ViewPager中移除掉            //mViewPager.removeView(imageViewList.get(position));            mViewPager.removeView(imageViewList.get(position%imageViewList.size()));        }    }
}
选择器xml文件
<?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/point_foucs"></item><item android:state_enabled="false" android:drawable="@drawable/point_normal"></item></selector>
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval">    <corners android:radius="5dp"></corners>    <solid android:color="@android:color/white"></solid></shape>
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval">    <corners android:radius="5dp"></corners>    <solid android:color="@android:color/darker_gray"></solid></shape>
布局文件xml
<?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"    android:orientation="vertical"    tools:context="com.myhome.MainActivity">    <android.support.v4.view.ViewPager        android:id="@+id/viewpager"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1">    </android.support.v4.view.ViewPager>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center_horizontal"        android:background="#66000000"        android:orientation="vertical"        android:padding="8dp">        <TextView            android:id="@+id/tv_description"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="我是图片的描述信息"            android:textSize="20dp"            android:textColor="#FFFFFF"/>        <LinearLayout            android:padding="10dp"            android:id="@+id/ll_point"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:orientation="horizontal">        </LinearLayout>    </LinearLayout></LinearLayout>
最后的效果图,自动播放

0 0
原创粉丝点击