zoukankan      html  css  js  c++  java
  • 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了。

  • 相关阅读:
    025-Cinder服务-->安装并配置一个本地存储节点(ISCSI)
    023-OpenStack 创建实例类型临时磁盘的讲解
    addClass+siblings+removeClass用意:
    SublimeText 改变 tab的距离
    正则表达式选取数值
    正则表达式用来根据某种匹配模式寻找字符串中的某些单词。
    hasOwnProperty()函数
    翻转字符串算法
    输入框禁用和启用
    什么是thinkphp
  • 原文地址:https://www.cnblogs.com/likeju/p/4780175.html
Copyright © 2011-2022 走看看