Android之ViewPager的使用

来源:互联网 发布:动漫头像制作软件 编辑:程序博客网 时间:2024/06/06 08:32

MainActivity:

public class MainActivity extends AppCompatActivity {    private static final String TAG = MainActivity.class.getSimpleName();    private ViewPager viewpager;    private TextView tv_title;    private LinearLayout ll_point_group;    //ListView的使用    //1.在布局文件中定义ListView    //2.在代码中实例化ListView    //3.准备数据    //4.设置适配器-item布局-绑定数据    private ArrayList<ImageView> imageViews;    // 图片资源ID    private final int[] imageIds = {            R.drawable.a,            R.drawable.b,            R.drawable.c,            R.drawable.d,            R.drawable.e };    /**     * 上一次高亮显示的位置     */    private int prePosition = 0;    /**     * 是否已经滚动     */    private boolean isDragging = false;    // 图片标题集合    private final String[] imageDescriptions = {            "尚硅谷波河争霸赛!",            "凝聚你我,放飞梦想!",            "抱歉没座位了!",            "7月就业名单全部曝光!",            "平均起薪11345元"    };    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            int item = viewpager.getCurrentItem()+1;            viewpager.setCurrentItem(item);            //延迟发消息            handler.sendEmptyMessageDelayed(0,4000);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        viewpager = (ViewPager) findViewById(R.id.viewpager);        tv_title = (TextView) findViewById(R.id.tv_title);        ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group);        //ViewPager的使用        //1.在布局文件中定义ViewPager        //2.在代码中实例化ViewPager        //3.准备数据        imageViews = new ArrayList<>();        for (int i = 0 ;i < imageIds.length;i++){            ImageView imageView = new ImageView(this);            imageView.setBackgroundResource(imageIds[i]);            //添加到集合中            imageViews.add(imageView);            //添加点            ImageView point = new ImageView(this);            point.setBackgroundResource(R.drawable.point_selector);            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8,8);            if(i==0){                point.setEnabled(true); //显示红色            }else{                point.setEnabled(false);//显示灰色                params.leftMargin = 8;            }            point.setLayoutParams(params);            ll_point_group.addView(point);        }        //4.设置适配器(PagerAdapter)-item布局-绑定数据        viewpager.setAdapter(new MyPagerAdapter());        //设置监听ViewPager页面的改变        viewpager.addOnPageChangeListener(new MyOnPageChangeListener());        //设置中间位置        int item = Integer.MAX_VALUE/2 - Integer.MAX_VALUE/2%imageViews.size();//要保证imageViews的整数倍        viewpager.setCurrentItem(item);        tv_title.setText(imageDescriptions[prePosition]);        //发消息        handler.sendEmptyMessageDelayed(0,3000);    }    class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {        /**         * 当页面滚动了的时候回调这个方法         * @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 realPosition = position%imageViews.size();            //设置对应页面的文本信息            tv_title.setText(imageDescriptions[realPosition]);            //把上一个高亮的设置默认-灰色            ll_point_group.getChildAt(prePosition).setEnabled(false);            //当前的设置为高亮-红色            ll_point_group.getChildAt(realPosition).setEnabled(true);            prePosition = realPosition;        }        /**         当页面滚动状态变化的时候回调这个方法         静止->滑动         滑动-->静止         静止-->拖拽         */        @Override        public void onPageScrollStateChanged(int state) {            if(state == ViewPager.SCROLL_STATE_DRAGGING){                isDragging = true;                handler.removeCallbacksAndMessages(null);                Log.e(TAG,"SCROLL_STATE_DRAGGING-------------------");            }else if(state == ViewPager.SCROLL_STATE_SETTLING){                Log.e(TAG,"SCROLL_STATE_SETTLING-----------------");            }else if(state == ViewPager.SCROLL_STATE_IDLE&&isDragging){                isDragging = false;                Log.e(TAG,"SCROLL_STATE_IDLE------------");                handler.removeCallbacksAndMessages(null);                handler.sendEmptyMessageDelayed(0,4000);            }        }    }    class MyPagerAdapter extends PagerAdapter{        /**         * 得到图片的总数         * @return         */        @Override        public int getCount() {//            return imageViews.size();            return Integer.MAX_VALUE;        }        /**         * 相当于getView方法         * @param container ViewPager自身         * @param position 当前实例化页面的位置         * @return         */        @Override        public Object instantiateItem(ViewGroup container, final int position) {            int realPosition = position%imageViews.size();            final ImageView imageView =  imageViews.get(realPosition);            container.addView(imageView);//添加到ViewPager中//            Log.e(TAG, "instantiateItem==" + position + ",---imageView==" + imageView);            imageView.setOnTouchListener(new View.OnTouchListener() {                @Override                public boolean onTouch(View v, MotionEvent event) {                    switch (event.getAction()){                        case MotionEvent.ACTION_DOWN://手指按下                            Log.e(TAG,"onTouch==手指按下");                            handler.removeCallbacksAndMessages(null);                            break;                        case MotionEvent.ACTION_MOVE://手指在这个控件上移动                            break;                        case MotionEvent.ACTION_CANCEL://手指在这个控件上移动                            Log.e(TAG,"onTouch==事件取消");//                            handler.removeCallbacksAndMessages(null);//                            handler.sendEmptyMessageDelayed(0,4000);                            break;                        case MotionEvent.ACTION_UP://手指离开                            Log.e(TAG,"onTouch==手指离开");                            handler.removeCallbacksAndMessages(null);                            handler.sendEmptyMessageDelayed(0,4000);                            break;                    }                    return false;                }            });            imageView.setTag(position);            imageView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    Log.e(TAG,"点击事件");                    int position = (int) v.getTag()%imageViews.size();                    String text = imageDescriptions[position];                    Toast.makeText(MainActivity.this, "text=="+text, Toast.LENGTH_SHORT).show();                }            });            return imageView;        }        /**         * 比较view和object是否同一个实例         * @param view 页面         * @param object  这个方法instantiateItem返回的结果         * @return         */        @Override        public boolean isViewFromObject(View view, Object object) {//            if(view == object){//                return true;//            }else{//                return  false;//            }            return view == object;        }        /**         * 释放资源         * @param container viewpager         * @param position 要释放的位置         * @param object 要释放的页面         */        @Override        public void destroyItem(ViewGroup container, int position, Object object) {//            super.destroyItem(container, position, object);//            Log.e(TAG, "destroyItem==" + position + ",---object==" + object);            container.removeView((View) object);        }    }}
drawable文件:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_enabled="false" android:drawable="@drawable/point_normal"/>    <item android:state_enabled="true" android:drawable="@drawable/point_press"/></selector>

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval">    <size        android:width="8dp"        android:height="8dp" />    <solid android:color="#44000000"/></shape>


<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval">    <size        android:width="8dp"        android:height="8dp" />    <solid android:color="#ff0000"/></shape>

activity_main:

<?xml version="1.0" encoding="utf-8"?><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"    tools:context="com.atguigu.viewpager.MainActivity">    <android.support.v4.view.ViewPager        android:id="@+id/viewpager"        android:layout_width="match_parent"        android:layout_height="180dp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignBottom="@id/viewpager"        android:background="#44000000"        android:orientation="vertical"        android:padding="5dp">        <TextView            android:id="@+id/tv_title"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center_horizontal"            android:padding="3dp"            android:text="美国队长3"            android:textColor="#ffffff" />        <LinearLayout            android:id="@+id/ll_point_group"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_horizontal"            android:orientation="horizontal" />    </LinearLayout></RelativeLayout>




0 0
原创粉丝点击