Android广告轮播Demo_仿淘宝广告轮播_滑动图片广告例子
程序员文章站
2022-03-01 16:03:26
...
今天在项目中遇到了这样的需求、轮播图片来展示商品、刚刚已经分享了一种方法
但是我觉得这种还是达不到我的要求、所以我后台又换了一种方式、比较好
跟淘宝京东的商品展示非常像、很符合的我胃口、现在分享出来、供大家使用
代码简单、设置简单、自定义圆点和滚动时间、通过 ViewPager 实现的
滚动图片的类
// 图片滚动类 public class MyImgScroll extends ViewPager { Activity mActivity; //上下文 List<View> mListViews; //图片组 int mScrollTime = 0; Timer timer; int oldIndex = 0; int curIndex = 0; public MyImgScroll(Context context, AttributeSet attrs) { super(context, attrs); } // 开始广告滚动 public void start(Activity mainActivity, List<View> imgList, int scrollTime, LinearLayout ovalLayout, int ovalLayoutId, int ovalLayoutItemId, int focusedId, int normalId) { mActivity = mainActivity; mListViews = imgList; mScrollTime = scrollTime; // 设置圆点 setOvalLayout(ovalLayout, ovalLayoutId, ovalLayoutItemId, focusedId, normalId); this.setAdapter(new MyPagerAdapter());// 设置适配器 if (scrollTime != 0 && imgList.size() > 1) { // 设置滑动动画时间 ,如果用默认动画时间可不用 ,反射技术实现 new FixedSpeedScroller(mActivity).setDuration(this, 700); startTimer(); // 触摸时停止滚动 this.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { startTimer(); } else { stopTimer(); } return false; } }); } if (mListViews.size() > 1) { // 设置选中为中间/图片为和第0张一样 this.setCurrentItem((Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2) % mListViews.size()); } } // 设置圆点 private void setOvalLayout(final LinearLayout ovalLayout, int ovalLayoutId, final int ovalLayoutItemId, final int focusedId , final int normalId) { if (ovalLayout != null) { LayoutInflater inflater=LayoutInflater.from(mActivity); for (int i = 0; i < mListViews.size(); i++) { ovalLayout.addView(inflater .inflate(ovalLayoutId, null)); } //选中第一个 ovalLayout.getChildAt(0).findViewById(ovalLayoutItemId) .setBackgroundResource(focusedId); this.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int i) { curIndex = i % mListViews.size(); //取消圆点选中 ovalLayout.getChildAt(oldIndex) .findViewById(ovalLayoutItemId) .setBackgroundResource(normalId); //圆点选中 ovalLayout.getChildAt(curIndex) .findViewById(ovalLayoutItemId) .setBackgroundResource(focusedId); oldIndex = curIndex; } public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageScrollStateChanged(int arg0) { } }); } } // 取得当明选中下标 public int getCurIndex() { return curIndex; } //停止滚动 public void stopTimer() { if (timer != null) { timer.cancel(); timer = null; } } //开始滚动 public void startTimer() { timer = new Timer(); timer.schedule(new TimerTask() { public void run() { mActivity.runOnUiThread(new Runnable() { public void run() { MyImgScroll.this .setCurrentItem(MyImgScroll.this .getCurrentItem() + 1); } }); } }, mScrollTime, mScrollTime); } // 适配器 //循环设置 private class MyPagerAdapter extends PagerAdapter { public void finishUpdate(View arg0) { } public void notifyDataSetChanged() { super.notifyDataSetChanged(); } public int getCount() { // 一张图片时不用流动 if (mListViews.size() == 1) { return mListViews.size(); } return Integer.MAX_VALUE; } public Object instantiateItem(View v, int i) { if (((ViewPager) v).getChildCount() == mListViews .size()) { ((ViewPager) v).removeView(mListViews .get(i % mListViews.size())); } ((ViewPager) v).addView(mListViews .get(i % mListViews.size()), 0); return mListViews.get(i % mListViews.size()); } public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } public void restoreState(Parcelable arg0, ClassLoader arg1) { } public Parcelable saveState() { return null; } public void startUpdate(View arg0) { } public void destroyItem(View arg0, int arg1, Object arg2) { } } }以下是对 start 方法中的参数介绍
mainActivity 显示广告的主界面
imgList 图片列表, 不能为null ,最少一张
scrollTime 滚动间隔 ,0为不滚动
ovalLayout 圆点容器,可为空,LinearLayout类型
ovalLayoutId ovalLayout为空时 写0, 圆点layout XMl
ovalLayoutItemId ovalLayout为空时 写0,圆点layout XMl 圆点XMl下View ID
focusedId ovalLayout为空时 写0, 圆点layout XMl 选中时的动画
normalId ovalLayout为空时 写0, 圆点layout XMl 正常时背景
控制动画速度一个类,如果用默认动画速度可以删除控制动画速度类
我这里就不贴控制动画速度的类了、大家可以在源代码中直接下载到哈
若资源对你有帮助、扫描下方的二维码、关注DD博客微信公众号(ddblogs)吧
最后给贴上Demo的源代码、希望对大家有用、有兴趣的哥们可以下载看看
源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1dD0KSwx 密码: hqci
推荐阅读
-
jQuery仿京东首页广告图片切换图片轮播
-
VerticalBannerView仿淘宝头条实现垂直轮播广告
-
jQuery实现仿路边灯箱广告图片轮播效果_jquery
-
jQuery仿京东首页广告图片切换图片轮播
-
VerticalBannerView仿淘宝头条实现垂直轮播广告
-
jQuery实现仿路边灯箱广告图片轮播效果_jquery
-
JavaScript仿商城实现图片广告轮播实例代码_javascript技巧
-
JavaScript仿商城实现图片广告轮播实例代码_javascript技巧
-
Android广告轮播Demo_仿淘宝广告轮播_滑动图片广告例子
-
Android3D广告图片滚动控件_3D图片轮播器Demo