ViewPager

来源:互联网 发布:老虎黄金外汇软件 编辑:程序博客网 时间:2024/06/07 08:11

Viewpager3.0出现的,用于大图轮播;

ViewPager预加载机制:最多保存3个page,超过的将需要被销毁掉

关联jar包的源代码:共两种方式;
1.先点击Android Dependencies,将它从BuildPath remove掉,
再右键点击jar包,将jar add to BuildPath;
然后就出现Attatch Source按钮了
2.在libs目录下新建一个文件,文件名是jar包全名(包括后缀.jar),然后
该文件名以.properties结尾,新建一行键值对如:
src=jar源代码绝对路径,(不要忘了将单斜线变成双斜线)

自定义View要带上包名:

在layout布局下定义view时。    <android.support.v4.view.ViewPager>    </android.support.v4.view.ViewPager>

ViewPager 需要 instantiateItem 相当于添加ListView中的getView;

public Object instantiateItem(ViewGroup container, int position) {            // TODO Auto-generated method stub            View view = View.inflate(MainActivity.this,R.layout.adapter_item, null);            ImageView imageview  =(ImageView) view.findViewById(R.id.image);            Ad ad = list.get(position);            imageview.setImageResource(ad.getIconResId());            container.addView(view);  //记得要将View添加到ViewPager中。            return view;  //需要返回view;        }

异常处理:
类明明存在,却报class not found异常解决方法
右键工程,打开bulid path面板,选择Order And Export,
将对应jar打钩

设置对应文字同步的方法是:设置页面改变的监听。

这个是文字改变时, 获取当前的页面与此匹配。  该方法要在页面改变监听中调用。    private void updateDesc(){        int currentpage = viewpager.getCurrentItem();        tv_desc.setText(list.get(currentpage).getDesc());    //获取当前页面。    }
    viewpager.setOnPageChangeListener(new OnPageChangeListener() {            @Override//页面改变的监听。            public void onPageSelected(int position) {                // TODO Auto-generated method stub//              Log.e("Mainactivity", "position :"+position);                updateDesc();            }            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                // TODO Auto-generated method stub            }            @Override            public void onPageScrollStateChanged(int state) {                // TODO Auto-generated method stub            }        });

动态的设置图片在pageVIew中:

这个方法是更新文字描述和原点的状态 。: private void updateDescAndDot() {        int currentpage = viewpager.getCurrentItem();        tv_desc.setText(list.get(currentpage).getDesc()); // 获取当前页面。        for(int i=0; i<ll_dot.getChildCount();i++){            ll_dot.getChildAt(i).setEnabled(currentpage==i);  //判断两者是否相同,相同的话为true。else为false。        }

几个原点用代码在linearLayout的注册方式:

private void initDots() {        // TODO Auto-generated method stub        for (int i = 0; i < list.size(); i++) {            View view = new  View(this);            LayoutParams  params = new LayoutParams(8,8);  //这个是Linearlayout的layoutParams需注意必须是,            if(i!=0){                params.leftMargin=5;  //第一个不用设置左边距。            }            view.setLayoutParams(params);            view.setBackgroundResource(R.drawable.selector_dot);            ll_dot.addView(view);        }

以下就是将ViewPager的轮播,变成无线循环的样式:
广告轮播的伪无限循环;

viewpager.setCurrentItem(item); viewPager中的方法。

    Ad ad = list.get(position%list.size());    //取得余数。
int currentValue = Integer.MAX_VALUE/2;        int value = currentValue%list.size();        viewpager.setCurrentItem(currentValue-value);     //保证两边都能无限的滑动。

adapter中的设置;

class MyAdapter extends PagerAdapter {        /**         * 获取page的总数量。         */        @Override        public int getCount() {            // TODO Auto-generated method stub            return Integer.MAX_VALUE; // list封装的数据个数。        }        /**         * 滑动的view和即将进入的view是不是同一个 true : 使用缓存 false: 重新创建。         */        @Override        public boolean isViewFromObject(View view, Object object) {            // TODO Auto-generated method stub            return view == object;        }        /**         * 删除销毁page; position 銷毀第几页。         */        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            // TODO Auto-generated method stub            // super.destroyItem(container, position, object);            container.removeView((View) object);        }        /**         * 类似于BaseAdapter的getView 方法。 将数据设置给View;         *          */        @Override        public Object instantiateItem(ViewGroup container, int position) {            // TODO Auto-generated method stub            View view = View.inflate(MainActivity.this, R.layout.adapter_item, null);            ImageView imageview = (ImageView) view.findViewById(R.id.image);            Ad ad = list.get(position%list.size());  //让它得到的值是其模数就能保证其能拿到具体的对象。            imageview.setImageResource(ad.getIconResId());            container.addView(view);            return view;        }

添加一个自动滑动的效果:
handler.sendEmptyMessageDelayed(0, 4000); 发送一个空的消息,用于延时。

加一个Handler就可以达到自动滑动的效果。    private Handler handler = new Handler() {        public void handleMessage(android.os.Message msg) {            viewpager.setCurrentItem(viewpager.getCurrentItem()+1);  //当前页面+1;            handler.sendEmptyMessageDelayed(0, 4000);  //每四秒发送一个消息。  这个是为了达到循环的效果。        };    };
0 0
原创粉丝点击