Android 广告轮播(伪无限循环)
来源:互联网 发布:java api接口编写实例 编辑:程序博客网 时间:2024/06/06 20:26
0. 效果图
1. 填充数据,ViewPager实现
用一个javabean来封装数据,
// 加载适配器vpContainer.setAdapter(new MyAdapter());
2. 动态添加标题
onPageChangeListener()来监听ViewPager的事件来改变标题
/** * 监听ViewPager的滑动,来动态改变标题 * * @author admin * */ class MyPagerChangeListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { initTitleAndDot(); } private void initTitleAndDot() { int currentPosition = vpContainer.getCurrentItem() % ads.size(); tvTitle.setText(ads.get(currentPosition).getTitle()); // 设置当前获取焦点的dot for (int i = 0; i < llDotContainer.getChildCount(); i++) { llDotContainer.getChildAt(i).setSelected(currentPosition == i); } } }
3. 添加指示点
根据广告的数量来往指示点容器里添加dot
// 根据广告的数量来动态添加dot for (int i = 0; i < ads.size(); i++) { View child = new View(this); // TODO LayoutParams的使用 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8, 8); if (i != 0) { params.leftMargin = 5; } child.setBackgroundResource(R.drawable.selector_dot); child.setLayoutParams(params); llDotContainer.addView(child); }
dot的状态用selector来控制
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_selected="true" android:drawable="@drawable/shape_dot_focus"></item> <item android:state_selected="false" android:drawable="@drawable/shape_dot_unfocus"></item></selector>
4. 自动切换
利用handler来实现
// 实现广告自动切换 private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { vpContainer.setCurrentItem(vpContainer.getCurrentItem() + 1); // 类似迭代实现自动切换功能 mHandler.sendEmptyMessageDelayed(0, 3000); }; };// 自动切换,利用handler实现// 每个3秒切换一次mHandler.sendEmptyMessageDelayed(0, 3000);
5. 无限循环
根据PagerAdpater的getCount()方法,
将返回的view的数量设置为Integer.MAX_VALUE
这样来实现伪无限循环。
/** * ViewPager的适配器 * * @author admin * */ class MyAdapter extends PagerAdapter { @Override public int getCount() { // return ads.size(); return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg1 == arg0; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView ivImage = new ImageView(MainActivity.this); ivImage.setImageResource(ads.get(position % ads.size()).getImage()); ivImage.setScaleType(ScaleType.FIT_XY); container.addView(ivImage); return ivImage; } } int count = Integer.MAX_VALUE / 2 % ads.size();// 当前页与第一页的差值 vpContainer.setCurrentItem(Integer.MAX_VALUE / 2 - count);// 将广告设置为中间,这样才能能两边无限循环
源代码
源代码链接
0 0
- Android 广告轮播效果(伪无限循环)
- Android 广告轮播(伪无限循环)
- android的自动播放和伪无限循环的广告轮播实现
- Android无限广告轮播
- Android无限广告轮播
- Android无限广告轮播
- ViewPager实现广告轮播---(一)(无限循环)
- 自定义的广告轮播---(二)(无限循环)
- 自定义的广告轮播 --(三)(无限循环)
- Android ViewPager实现广告无限轮播
- ios 滚动视图,滚动广告,无限循环轮播
- 平滑的无限循环ViewPager广告轮播
- iOS广告Banner,使用三个ImgView无限循环轮播
- Android viewpager实现无限循环轮播
- Android无限循环轮播广告位Banner
- Android无限循环轮播广告位Banner
- Android无限循环轮播广告位Banner
- 自定义Banner轮播广告(真*无限循环无卡顿&设置切换速度)
- Apple source addres
- nyoj贪心算法
- 工作需要认真啊
- 继承与派生(一)
- 2017年度个人计划
- Android 广告轮播(伪无限循环)
- API网关Ocelot 使用Polly 处理部分失败问题
- REF游标的用法
- JavaScript将url地址快速变成键值对的JavaScript对象形式
- OC消息转发
- 安卓 广播
- jsp九大内置对象详解
- 一次查询性能提高40倍的经历
- ASP.NET MVC 5 (五)c#的lambda表达式、LinQ和Async异步处理