Android首页轮播图直接拿来用
import java.util.ArrayList;import java.util.List;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;import android.content.Context;import android.os.Handler;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.AttributeSet;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.ImageView.ScaleType;import android.widget.LinearLayout;import android.widget.RelativeLayout;public class HeadAD extends RelativeLayout { private ViewPager vp; private LinearLayout symbolLayout, bottomLayout; private LayoutParams lp; // private ArrayList<imageview> symbolViews; private List<viewpagerbean> showResults; private boolean isContinue = true; private int currentItem = 0; // 当前图片的索引号 private ScheduledExecutorService updateService; private Context context; public void initData(List<viewpagerbean> pResult) { showResults = pResult; } public HeadAD(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; // setBackgroundResource(R.color.black); } public void initView(Context context) { // TODO Auto-generated method stub lp = new LayoutParams(LayoutParams.MATCH_PARENT, DensityUtil.dip2px( context, 180)); vp = new ViewPager(context); vp.setLayoutParams(lp); lp = new LayoutParams(LayoutParams.MATCH_PARENT, DensityUtil.dip2px( context, 20)); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); bottomLayout = new LinearLayout(context); bottomLayout.setGravity(Gravity.CENTER); bottomLayout.setOrientation(LinearLayout.VERTICAL); bottomLayout.setLayoutParams(lp); bottomLayout.setBackgroundResource(R.color.footerBg); lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); symbolLayout = new LinearLayout(context); symbolLayout.setGravity(Gravity.CENTER); symbolLayout.setOrientation(LinearLayout.HORIZONTAL); symbolLayout.setPadding(0, 0, 5, 5); ImageView symbolIv; for (int i = 0; i < showResults.size(); i++) { if (showResults.size() > 1) { symbolIv = new ImageView(context); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.rightMargin = 10; symbolIv.setBackgroundResource(R.drawable.point_bg); symbolIv.setEnabled(false); if (i == 0) { symbolIv.setEnabled(true); } else { symbolIv.setEnabled(false); } symbolIv.setLayoutParams(params); symbolLayout.addView(symbolIv); } } bottomLayout.addView(symbolLayout); adapter = new ViewPagerAdapter(context, showResults); vp.setAdapter(adapter); vp.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: isContinue = false; break; case MotionEvent.ACTION_MOVE: isContinue = false; break; case MotionEvent.ACTION_UP: isContinue = true; break; case MotionEvent.ACTION_CANCEL: break; } return false; } }); vp.setOnPageChangeListener(new MyPageChangeListener()); addView(vp); addView(bottomLayout); } private Handler viewPagerHandler = new Handler() { public void handleMessage(android.os.Message msg) { vp.setCurrentItem(currentItem % showResults.size());// 切换当前显示的图片 }; }; public ViewPagerAdapter adapter; // 直接在activity的OnResume里调用,当前界面是该activity时开始循环 public void startUpdate() { this.updateService = Executors.newSingleThreadScheduledExecutor(); this.updateService.scheduleAtFixedRate(new ScrollTask(), 5, 5, TimeUnit.SECONDS); } // 直接在activity的OnPause里调用,当前界面不是该activity时停止循环 public void stopUpdate() { this.updateService.shutdown(); updateService = null; } /** * 当ViewPager中页面的状态发生改变时调用 * * */ private class MyPageChangeListener implements OnPageChangeListener { private int oldPosition = 0; public void onPageSelected(int position) { currentItem = position % showResults.size(); symbolLayout.getChildAt(oldPosition).setEnabled(false); symbolLayout.getChildAt(position).setEnabled(true); oldPosition = position; } public void onPageScrollStateChanged(int arg0) { } public void onPageScrolled(int arg0, float arg1, int arg2) { } } /** * 换行切换任务 * * @author Administrator * */ private class ScrollTask implements Runnable { public void run() { if (isContinue) { synchronized (vp) { System.out.println("currentItem: " + currentItem); currentItem = (currentItem + 1) % showResults.size(); viewPagerHandler.obtainMessage().sendToTarget(); // 通过Handler切换图片 } } } }}</viewpagerbean></viewpagerbean></imageview> |
HEADAD 实现了自定轮播计时。
下面看adapter写法 删除了部分项目逻辑
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
import java.util.List;import android.content.Context;import android.content.Intent;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ImageView;import com.nostra13.universalimageloader.core.DisplayImageOptions;/******************************************************* * * ********************************************************/public class ViewPagerAdapter extends PagerAdapter { List<viewpagerbean> lists; Context ct; private ImageView imgView; private int currentPosition = 0; private DisplayImageOptions options; public ViewPagerAdapter(Context ct, List<viewpagerbean> mList) { lists = mList; this.ct = ct; options = new DisplayImageOptions.Builder().cacheInMemory(true) .cacheOnDisk(true) .showImageOnLoading(R.drawable.default_news_logo).build(); } /** * 获得页面的总数 */ public int getCount() { return lists.size(); } /** * 获得相应位置上的view container view的容器 */ public Object instantiateItem(ViewGroup container, final int position) { // imgView.setOnClickListener(this); imgView = new ImageView(ct); imgView.setScaleType(ImageView.ScaleType.FIT_XY); if (lists.size() == 0) { } else { //写自己的逻辑 currentPosition = position % lists.size(); } // 给 container 添加一个view container.addView(imgView); // 返回一个和该view相对的object return imgView; } /** * 判断 view和object的对应关系 */ public boolean isViewFromObject(View view, Object object) { if (view == object) { return true; } else { return false; } } /** * 销毁对应位置上的object */ public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); object = null; } @Override public int getItemPosition(Object object) { // TODO Auto-generated method stub return super.getItemPosition(object); }}</viewpagerbean></viewpagerbean> |
实体bean这里就不贴了
用到工具类 ......还有几个不重要就不贴了
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import android.content.Context;public class DensityUtil { /** * 根据手机的分辨率从 dip 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * 根据手机的分辨率从 px(像素) 的单位 转成为 dp */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); }} |
如何调用:
|
1
2
3
|
mViewPager = new HeadAD(getActivity(), null); mViewPager.initData(viewPagerLists); mViewPager.initView(getActivity()); |
就这样就OK了。
Android首页轮播图直接拿来用的更多相关文章
- 用jQuery实现优酷首页轮播图
▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解: ...
- 关于用jQuery知识来实现优酷首页轮播图!
▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解: ...
- 【VIP视频网站项目二】搭建爱奇艺优酷腾讯视频官网首页轮播图效果及实现原理分析
这个是实现的效果,基本上轮播效果和主流网站的一致,但是我也在上面优化了一些效果, 可以在线预览效果:https://vip.52tech.tech/ 目前项目代码已经全部开源:项目地址:https:/ ...
- web手工项目02-注册功能输入分析,处理,输出方法-测试用例及缺陷编写-首页轮播图和购物车
web手工项目第二天笔记 昨日回顾 搭建测试环境(WAMP,phpStudy,tpshop项目文件) 熟悉项目(四个步骤,三个来源) 项目测试流程(需求评审,测试计划与方案,测试用例设计与评审,测试执 ...
- 商城05——首页轮播图显示实现&Redis环境搭建&Redis实现缓存
1. 课程计划 1.首页轮播图的展示 2.首页大广告展示流程图 3.Redis的常用命令 4.Redis的服务器搭建 (集群的搭建) 5.向业务逻辑中添加缓存 6.Jedis的使用(redis的客 ...
- celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决
今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...
- Android自己定义控件之应用程序首页轮播图
如今基本上大多数的Android应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...
- angularjs实现首页轮播图
<!DOCTYPE html> <html ng-app="myApp" lang="en"> <head> <met ...
- 使用JS完成首页轮播图效果
获取document.getElementById("id名称"); 事件onload 定时操作setInterval("changeImg()",3000); ...
随机推荐
- 杂项:Java un
ylbtech-杂项:Java 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech. ...
- 12_传智播客iOS视频教程_注释和函数的定义和调用
OC的注释和C语言的注释一模一样.它也分单行注释和多行注释. OC程序里面当然可以定义一个函数.并且定义的方式方法和调用的方式方法和我们C语言是一模一样的.OC有什么好学的?一样还学个什么呢? 重点是 ...
- patch用法 (转载)
转载:http://shenze60.blog.163.com/blog/static/315747722009724113026896/ 首先介绍一下diff和patch.在这里不会把man在线文档 ...
- Luogu P1083 借教室【二分答案/差分】By cellur925
题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海 ...
- 3-2 -------WERTYU------题挺水的
//题目的意思就是-----键盘上面你输入一个字符,就要输出该字符左边的字符. //空格和回车原样输出. #include<stdio.h> int main() { char a[]={ ...
- [SDOI2016]墙上的句子
题目描述 考古学家发现了一堵写有未知语言的白色墙壁,上面有一个n行m列的格子,其中有些格子内被填入了某个A至Z的大写字母,还有些格子是空白的. 一直横着或竖着的连续若干个字母会形成一个单词,且每一行的 ...
- for循环的阶乘
方法一: long sum=0; long num=1; for (long i = 1; i <=20; i++) { for(long j=i;j>0;j--){ num=num*j; ...
- python_基础部分(1)
第1章 Python介绍 1.1 基础介绍 l 代码:代码的出现是为了解决生活中的问题 l 编译解释器:目的是让解释器将代码翻译成计算机可识别的语言 l 编程语言:按照一定规则写出来的语言, C ...
- [转]强制取消TFS2008中其它成员的签出文件
本文转自:http://www.cnblogs.com/georgehu/archive/2010/10/23/1859573.html 有个项目,以前的成员离职了,刚好又签出了一个文件在TFS中并且 ...
- 常用linux命令大全 转载自:https://www.cnblogs.com/laov/p/3541414.html(大牛笔记)
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debian 安装VMware或VirtualBox虚拟机.具体安 ...