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); //每四秒发送一个消息。 这个是为了达到循环的效果。 }; };
- Viewpager
- ViewPager
- ViewPager
- ViewPager
- ViewPager
- ViewPager
- viewpager
- ViewPager
- ViewPager
- ViewPager
- Viewpager
- viewpager
- ViewPager
- ViewPager
- ViewPager
- viewpager
- ViewPager
- ViewPager
- tab切换 以及 jquery追加与移除
- Yeelink:将复杂的传感器以极简的方式组到同一个网络内
- 学习计划 - redis
- tjut 3518
- 学习计划 - hadoop
- ViewPager
- 学习计划 - kafka
- C++学习笔记(一)--整形,std输出,浮点数,数组,字符串,结构,指针,循环
- Vijos P1905 生活大爆炸版 石头剪刀布(滚动数组)
- java正则表达式常见验证
- 设计模式学习第十九天
- EF 学习笔记
- pat_BL_1019
- java基础菱形图案输出