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首页轮播图直接拿来用的更多相关文章

  1. 用jQuery实现优酷首页轮播图

    ▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解: ...

  2. 关于用jQuery知识来实现优酷首页轮播图!

    ▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解: ...

  3. 【VIP视频网站项目二】搭建爱奇艺优酷腾讯视频官网首页轮播图效果及实现原理分析

    这个是实现的效果,基本上轮播效果和主流网站的一致,但是我也在上面优化了一些效果, 可以在线预览效果:https://vip.52tech.tech/ 目前项目代码已经全部开源:项目地址:https:/ ...

  4. web手工项目02-注册功能输入分析,处理,输出方法-测试用例及缺陷编写-首页轮播图和购物车

    web手工项目第二天笔记 昨日回顾 搭建测试环境(WAMP,phpStudy,tpshop项目文件) 熟悉项目(四个步骤,三个来源) 项目测试流程(需求评审,测试计划与方案,测试用例设计与评审,测试执 ...

  5. 商城05——首页轮播图显示实现&Redis环境搭建&Redis实现缓存

    1.   课程计划 1.首页轮播图的展示 2.首页大广告展示流程图 3.Redis的常用命令 4.Redis的服务器搭建 (集群的搭建) 5.向业务逻辑中添加缓存 6.Jedis的使用(redis的客 ...

  6. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

  7. Android自己定义控件之应用程序首页轮播图

    如今基本上大多数的Android应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...

  8. angularjs实现首页轮播图

    <!DOCTYPE html> <html ng-app="myApp" lang="en"> <head> <met ...

  9. 使用JS完成首页轮播图效果

    获取document.getElementById("id名称"); 事件onload 定时操作setInterval("changeImg()",3000); ...

随机推荐

  1. Mac 下安装配置jdk

    jdk官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 1.  Mac自带了的JDK6,安装在目录:/ ...

  2. 利用爬虫将Yuan先生的博客文章爬取下来

    由于一次巧遇,我阅读了Yuan先生的一篇博客文章,感觉从Yuan先生得博客学到很多东西,很喜欢他得文章.于是我就关注了他,并且想阅读更多出自他手笔得博客文章,无奈,可能Yuan先生不想公开自己得博客吧 ...

  3. UTF-8格式的文本文件程序读取异常

    最近在windows服务器上直接创建并手打输入配置参数,比如设置概率0.6,然后用java程序打开读取该参数,在本地linux环境下测试完全正常,但是一放到服务器上,就报NotNumber错误,查看了 ...

  4. Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger

    myeclipse 新建web项目,报错Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger,查看项目中已经有引入了 ...

  5. 数据结构 - 链队列的实行(C语言)

    数据结构-链队列的实现 1 链队列的定义 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已, 我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指 ...

  6. B Balala Power!

    Bryce1010模板 每个字母所在位置对应权值加和,肯定存不下. 但我们只需要26个字母对应值之间的关系即可,开一个数组a[i][j]分别记录字母i在j这个位置上出现了多少次,对于大于26的值进位, ...

  7. 题解报告:hdu 1229 还是A+B

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1229 Problem Description 读入两个小于10000的正整数A和B,计算A+B.需要注 ...

  8. JDK6中System.getProperties返回键值说明

    JDK6中java.lang.System.getProperties()方法返回键值说明. 键 相关值的描述 java.version Java 运行时环境版本 java.vendor Java 运 ...

  9. 基于Windows7下snort+apache+php 7 + acid(或者base) + adodb + jpgraph的入侵检测系统的搭建(图文详解)(博主推荐)

    为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习.人工智能.区域链研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机 ...

  10. Android开发学习——android反编译

    第一种: 1.下载下边的三个jar包,对dex2jar和jd-gui进行解压 2.将需要反编译的apk后缀名改为.rar,然后进行解压 3.将解压后生成的classes.dex加入第一步解压后的dex ...