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了。

时间: 2024-10-18 17:24:45

Android首页轮播图直接拿来用的相关文章

用jQuery实现优酷首页轮播图

▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解:或者你和我一样学习jQuery不久,那你可以看看我的jQuery小案例(持续更新),互相学习! 预览:优酷首页轮播图 ▓▓▓▓▓▓ 思路 思路其实非常简单,就是当点击图片下面的圆点或者图片两边的箭头时,让想要看到的图片走到它的位置,然后当前的图片和想要看到的图片按照一个方向运动就可以了 例如:我们点

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

▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解:或者你和我一样学习jQuery不久,那你可以看看我的jQuery小案例(持续更新),互相学习! 预览:优酷首页轮播图 ▓▓▓▓▓▓ 思路 思路其实非常简单,就是当点击图片下面的圆点或者图片两边的箭头时,让想要看到的图片走到它的位置,然后当前的图片和想要看到的图片按照一个方向运动就可以了 例如:我们点

第一阶段:前端开发_使用JS完成首页轮播图效果

2018-06-04 使用JS完成首页轮播图效果 一.技术分析 获取元素: document.getElementById("id 名称") 事件(onload) :页面加载事件 定时操作:setInterval("changeImg()",3000); 二.步骤分析 第一步:确定事件(onload)并为其绑定一个函数    第二步:书写绑定的这个函数    第三步:书写定时任务(setInterval)    第四步:书写定时任务里面的函数    第五步:通过变量

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

现在基本上大多数的Android应用程序的首页都有轮播图,就是像下图这样的(此图为转载的一篇博文中的图,拿来直接用了): 像这样的组件我相信大多数的应用程序都会使用到,本文就是自定义一个这样的组件,可以动态设置图片的张数.下面就开始本次的自定义之旅吧,首先看一下自定义控件的的布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://

JavaScript学习——实现首页轮播图效果

1.相关技术 获取元素 document.getElementById("id 名称") 事件(onload) 定时操作:setInterval("changeImg()",3000); 2.步骤分析(此案例轮播图效果是基于HTML&CSS--使用DIV和CSS完成网站首页重构实现的) 事先准备三张一样大小的图片(img1.img2.img3)放在文件夹Img下. 第一步:确定事件(onload)并为其绑定一个函数 第二步:书写绑定的这个函数 第三步:书写定

angularjs实现首页轮播图

<!DOCTYPE html> <html ng-app="myApp" lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS carousel</title> <link href="http://libs.baidu.com/bootstrap/3.3.0/css/bootstrap.min.c

用原生JS 写Web首页轮播图

目前自己在学习JS中,用目前学到的东西写了一个轮播图,能完整的实现轮播图的功能,但是肯定还是有不完善的地方,也希望大家能留言交流,一起学习. 一.思路 首先将功能一个一个理顺,主要功能分为三大块: (一)点击左右按钮,实现更换图片并循环. (二)图片自动定时切换,当鼠标在图片上时暂停切换,移出时恢复. (三)轮播图上导航点变换与点击切换 二.实现 HTML和CSS的代码如下: <!doctype html> <head> <title>轮播图</title>

Flask实战第48天:首页轮播图实现

首页的布局如下 因为以后所有的内容都是在main-container里面,所以这里我们修改front_base.html,把{% block body%}{% endblock%}放到里面去 <div class="main-container"> {% block body %}{% endblock %} </div> 创建static/front/css/front_base.css, 并且在front_base.html中引入它 .main-contai

阶段一-02.分类,推荐,搜索,评价,购物车开发-第1章 首页轮播图+分类功能实现-1-1 实现电商首页轮播图功能

绿色的部分 背景色和当前的图片是对应的 Mysql内,数据表已经包含了一些数据. 编写代码service层 定义为一个接口, 实现类 实现接口类,并加上注解@Service controller 参数为了更通用化,一般会使用枚举.复制Sex复制为YesOrNo的枚举类. 写死的数据尽量要做到通用化. 查询方法的参数 使用枚举 加上seagger的注释. 测试 全局安装.maven install 启动API.刷新页面轮播图就出来了. 前端代码逻辑 前端通过jquery去渲染 结束 原文地址:ht