2019独角兽企业重金招聘Python工程师标准>>>

自定义广告轮播

  • 自定义控件ImageCycleView
  • 每个广告页的对象(包含具体显示图片、内容、id等)

    自定义广告控件 ImageCycleView

package com.changyu.ccfunding.ui.widget;import android.content.Context;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;import com.changyu.ccfunding.R;
import com.changyu.ccfunding.entity.ADInfo;import java.util.ArrayList;/*** 广告图片自动轮播控件</br>* * <pre>*   集合ViewPager和指示器的一个轮播控件,主要用于一般常见的广告图片轮播,具有自动轮播和手动轮播功能 *   使用:只需在xml文件中使用{@code <com.minking.imagecycleview.ImageCycleView/>} ,*   然后在页面中调用  {@link #setImageResources(ArrayList, ImageCycleViewListener) }即可!*   *   另外提供{@link #startImageCycle() } \ {@link #pushImageCycle() }两种方法,用于在Activity不可见之时节省资源;*   因为自动轮播需要进行控制,有利于内存管理* </pre>* */
public class ImageCycleView extends LinearLayout {/*** 上下文*/private Context mContext;/*** 图片轮播视图*/private CycleViewPager mBannerPager = null;/*** 滚动图片视图适配器*/private ImageCycleAdapter mAdvAdapter;/*** 图片轮播指示器控件*/private ViewGroup mGroup;/*** 图片轮播指示器-个图*/private ImageView mImageView = null;/*** 滚动图片指示器-视图列表*/private ImageView[] mImageViews = null;/*** 图片滚动当前图片下标*/private int mImageIndex = 1;/*** 手机密度*/private float mScale;/*** @param context*/public ImageCycleView(Context context) {super(context);}/*** @param context* @param attrs*/public ImageCycleView(Context context, AttributeSet attrs) {super(context, attrs);mContext = context;mScale = context.getResources().getDisplayMetrics().density;LayoutInflater.from(context).inflate(R.layout.view_banner_content, this);mBannerPager = (CycleViewPager) findViewById(R.id.pager_banner);mBannerPager.setOnPageChangeListener(new GuidePageChangeListener());mBannerPager.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_UP:// 开始图片滚动startImageTimerTask();break;default:// 停止图片滚动stopImageTimerTask();break;}return false;}});// 滚动图片右下指示器视图mGroup = (ViewGroup) findViewById(R.id.viewGroup);}/*** 装填图片数据* * @param infoList* @param imageCycleViewListener*/public void setImageResources(ArrayList<ADInfo> infoList, ImageCycleViewListener imageCycleViewListener) {// 清除所有子视图mGroup.removeAllViews();// 图片广告数量final int imageCount = infoList.size();mImageViews = new ImageView[imageCount];for (int i = 0; i < imageCount; i++) {mImageView = new ImageView(mContext);int imageParams = (int) (mScale * 20 + 0.5f);// XP与DP转换,适应不同分辨率int imagePadding = (int) (mScale * 5 + 0.5f);LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);layout.setMargins(3, 0, 3, 0);mImageView.setLayoutParams(layout);//mImageView.setPadding(imagePadding, imagePadding, imagePadding, imagePadding);mImageViews[i] = mImageView;if (i == 0) {mImageViews[i].setBackgroundResource(R.drawable.icon_point_pre);} else {mImageViews[i].setBackgroundResource(R.drawable.icon_point);}mGroup.addView(mImageViews[i]);}mAdvAdapter = new ImageCycleAdapter(mContext, infoList, imageCycleViewListener);mBannerPager.setAdapter(mAdvAdapter);startImageTimerTask();}/*** 开始轮播(手动控制自动轮播与否,便于资源控制)*/public void startImageCycle() {startImageTimerTask();}/*** 暂停轮播——用于节省资源*/public void pushImageCycle() {stopImageTimerTask();}/*** 开始图片滚动任务*/private void startImageTimerTask() {stopImageTimerTask();// 图片每3秒滚动一次mHandler.postDelayed(mImageTimerTask, 3000);}/*** 停止图片滚动任务*/private void stopImageTimerTask() {mHandler.removeCallbacks(mImageTimerTask);}private Handler mHandler = new Handler();/*** 图片自动轮播Task*/private Runnable mImageTimerTask = new Runnable() {@Overridepublic void run() {if (mImageViews != null) {// 下标等于图片列表长度说明已滚动到最后一张图片,重置下标if ((++mImageIndex) == mImageViews.length + 1) {mImageIndex = 1;}mBannerPager.setCurrentItem(mImageIndex);}}};/*** 轮播图片状态监听器* * @author minking*/private final class GuidePageChangeListener implements OnPageChangeListener {@Overridepublic void onPageScrollStateChanged(int state) {if (state == ViewPager.SCROLL_STATE_IDLE)startImageTimerTask(); // 开始下次计时}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int index) {if (index == 0 || index == mImageViews.length + 1) {return;}// 设置图片滚动指示器背景mImageIndex = index;index -= 1;mImageViews[index].setBackgroundResource(R.drawable.icon_point_pre);for (int i = 0; i < mImageViews.length; i++) {if (index != i) {mImageViews[i].setBackgroundResource(R.drawable.icon_point);}}}}private class ImageCycleAdapter extends PagerAdapter {/*** 图片视图缓存列表*/private ArrayList<ImageView> mImageViewCacheList;/*** 图片资源列表*/private ArrayList<ADInfo> mAdList = new ArrayList<ADInfo>();/*** 广告图片点击监听器*/private ImageCycleViewListener mImageCycleViewListener;private Context mContext;public ImageCycleAdapter(Context context, ArrayList<ADInfo> adList, ImageCycleViewListener imageCycleViewListener) {mContext = context;mAdList = adList;mImageCycleViewListener = imageCycleViewListener;mImageViewCacheList = new ArrayList<ImageView>();}@Overridepublic int getCount() {return mAdList.size();}@Overridepublic boolean isViewFromObject(View view, Object obj) {return view == obj;}@Overridepublic Object instantiateItem(ViewGroup container, final int position) {String imageUrl = mAdList.get(position).getUrl();ImageView imageView = null;if (mImageViewCacheList.isEmpty()) {imageView = new ImageView(mContext);imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));imageView.setScaleType(ImageView.ScaleType.FIT_XY);} else {imageView = mImageViewCacheList.remove(0);}// 设置图片点击监听imageView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mImageCycleViewListener.onImageClick(mAdList.get(position),position, v);}});imageView.setTag(imageUrl);container.addView(imageView);mImageCycleViewListener.displayImage(imageUrl, imageView);return imageView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {ImageView view = (ImageView) object;container.removeView(view);mImageViewCacheList.add(view);}}/*** 轮播控件的监听事件* * @author minking*/public static interface ImageCycleViewListener {/*** 加载图片资源* * @param imageURL* @param imageView*/public void displayImage(String imageURL, ImageView imageView);/*** 单击图片事件* * @param info* @param imageView*/public void onImageClick(ADInfo info, int postion, View imageView);}}

每个广告页的对象

package com.changyu.ccfunding.entity;/*** 描述:广告信息</br>** @author Eden Cheng</br>* @version 2015年4月23日 上午11:32:53*/
public class ADInfo {String id = "";String url = "";String content = "";String type = "";public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getType() {return type;}public void setType(String type) {this.type = type;}}

主函数FirstFragment.java

  • 填充Arrylist<ADinfo>数组
  • 实现ImageCycleView控件中的ImageCycleViewListener监听(其中包括每一页的点击事件和图片加载(Pcasso图片加载))
package com.changyu.ccfunding.ui.fragment;import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;import com.changyu.ccfunding.R;
import com.changyu.ccfunding.entity.ADInfo;
import com.changyu.ccfunding.ui.base.BaseFragment;
import com.changyu.ccfunding.ui.widget.ImageCycleView;
import com.changyu.ccfunding.ui.widget.ImageCycleView.ImageCycleViewListener;
import com.squareup.picasso.Picasso;import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.ViewInject;import java.util.ArrayList;/*** Created by Administrator on 2016/7/11.*/@ContentView(R.layout.fragment_first)
public class FirstFragment extends BaseFragment {@ViewInject(R.id.ad_view)private ImageCycleView mAdView;private ArrayList<ADInfo> infos = new ArrayList<ADInfo>();private String[] imageUrls = {"http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg","http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg","http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg","http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg","http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg",};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);for (int i = 0; i < imageUrls.length; i++) {ADInfo info = new ADInfo();info.setUrl(imageUrls[i]);info.setContent("top-->" + i);infos.add(info);}}@Overridepublic void onViewCreated(View view, Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);mAdView.setImageResources(infos, mAdCycleViewListener);}private ImageCycleViewListener mAdCycleViewListener = new ImageCycleViewListener() {@Overridepublic void onImageClick(ADInfo info, int position, View imageView) {Toast.makeText(getActivity(), "content->" + info.getContent(), Toast.LENGTH_SHORT).show();}@Overridepublic void displayImage(String imageURL, ImageView imageView) {Picasso.with(getActivity()).load(imageURL).into(imageView);
//            ImageLoader.getInstance().displayImage(imageURL, imageView);// 使用ImageLoader对图片进行加装!}};@Overridepublic void onResume() {super.onResume();mAdView.startImageCycle();}@Overridepublic void onPause() {super.onPause();mAdView.pushImageCycle();}@Overridepublic void onDestroy() {super.onDestroy();mAdView.pushImageCycle();}
}

转载于:https://my.oschina.net/u/2493156/blog/714849

广告图片自动轮播控件相关推荐

  1. java图片轮播_java制作广告图片自动轮播控件

    首页图片的轮播 /** * 广告图片自动轮播控件 * */ public class ImageCycleView extends LinearLayout { /** * 上下文 */ privat ...

  2. iOS 自定义图片无限轮播控件

    一:简介 图片轮播功能在App中是一个非常常见的功能,即允许定时滚动,也允许拖拽滚动,也可以点击每张图片触发事件. 二:实现方式 图片轮播功能的实现方式有很多中, UIScrollView + N个U ...

  3. android banner 广告,Android convinientbanner顶部广告轮播控件使用详解

    本文实例为大家分享了convinientbanner顶部广告轮播控件的具体代码,供大家参考,具体内容如下 gradle中添加 compile 'com.bigkoo:convenientbanner: ...

  4. c# imager让图片有圆角unity_Qt编写自定义控件24-图片轮播控件

    一.前言 上一篇文章写的广告轮播控件,采用的传统widget堆积设置样式表做的,这次必须要用到更高级的QPainter来绘制了,这个才是最高效的办法,本控件参考雨田哥的轮播控件,经过大规模的改造而成, ...

  5. android banner加载布局,Android知识点之图片轮播控件Banner

    Rate this post 在我们来发Android项目时,经常有图片或者广告的轮播功能的需求,下面将介绍一款Android开发时使用的开源图片轮播控件Banner,同时按序讲解如何使用配置这款控件 ...

  6. android 3d布局轮播,android 图片/视频混合轮播控件banner

    android 图片/视频混合轮播控件banner 在youth5201314的图片轮播控件做的修改 原作者github地址:https://github.com/youth5201314/banne ...

  7. android 图片轮播组件,Android客户端实现图片轮播控件

    本文和大家一起写一个Android图片轮播控件,供大家参考,具体内容如下 1. 轮播控件的组成部分 我们以知乎日报Android客户端的轮播控件为例,分析一下轮播控件的主要组成: 首先我们要有用来显示 ...

  8. android横幅轮播,横幅广告图片轮播控件 – bannerview

    BannerView 横幅广告图片轮播控件 Gradle repositories { maven { url "https://jitpack.io" } } dependenc ...

  9. ios 图片自动轮播

    ios 图片自动轮播 #import "NYViewController.h"#define kImageCount 5@interface NYViewController () ...

最新文章

  1. IT人的自我导向型学习:开篇杂谈
  2. 四因素三水平正交试验表_案例 | 螺栓装配失效试验研究
  3. python网站开发linux_使用Python编写Linux系统守护进程实例
  4. mysql索引有几种使用索引的好处_mysql索引的类型和优缺点
  5. maven java1.7_本周Java技巧#7 – Maven慢吗?
  6. 1823政府经济学 (2)
  7. 错误 open too many files
  8. matlab 计算汉明距_matlab实现滑动平均滤波
  9. android 仿支付宝菜单_这个 Android 几乎放弃的设计,iOS 要用上了?
  10. 正在发生的景象--从大众消费到圈层经济
  11. java模拟器触屏_jar模拟器-jar模拟器触屏版电脑版下载_暂未上线|好特下载
  12. Session超时设置
  13. c语言中average的用法,average的用法辨析整理
  14. 邮件中的 请看附件 请知悉,英语怎么说 要比较正式的用语
  15. oracle的安装教程
  16. 哈佛学者:这3本英文名著,每天小读10分钟,英语level暴涨....
  17. 每日一佳——Information-Theoretic Metric Learning(Jason V. Davis et al. ,ICML,2007)
  18. Java EE:第10章初识Spring MVC框架 课后习题
  19. 深度学习--基于队列的数据随机载入
  20. 程序史简史:从巴贝奇到爱达在到图灵

热门文章

  1. Promise.all等待方法执行完毕再执行
  2. YOLOv5数据集划分脚本(train、val、test)
  3. 自定义EL表达式的函数
  4. “This probably means that you are not using fork to start your child processes and you hav报错
  5. spark while_while循环怎么理解
  6. 记2015沈阳区域赛
  7. 想做游戏测试工程师?这几点不知道可不行!
  8. 百度飞桨亮相2019 AIIA,四大领先技术剑指落地引开发者点赞
  9. mysql数据库实验任务二_MySQL数据库实验:任务二 表数据的插入、修改及删除
  10. 如何将m3u8格式转成MP4以及可播放格式