Android 自动轮播图 bnner的实现原理~

来源:互联网 发布:java程序编译原理 编辑:程序博客网 时间:2024/05/23 19:15


1.自动轮播的View布局

<RelativeLayout        android:layout_width="match_parent"        android:layout_height="140dp"        >        <android.support.v4.view.ViewPager            android:id="@+id/vp"            android:layout_width="match_parent"            android:layout_height="match_parent">        </android.support.v4.view.ViewPager>        <LinearLayout            android:id="@+id/lld"            android:layout_width="match_parent"            android:layout_height="20dp"            android:orientation="horizontal"            android:layout_alignParentBottom="true"            android:gravity="center"            >        </LinearLayout>    </RelativeLayout>
2.设置适配器完了 调用Timer倒计时方法

//初始化viewpage LinearLayout

private ViewPager vp;    private LinearLayout ll;    private List<ImageView> listIv=new ArrayList<>();    private int curr;    private List<Integer> list;    private Timer timer;    private Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            int currentItem = vp.getCurrentItem();            currentItem++;            vp.setCurrentItem(currentItem);        }    };
//往集合里面 添加数据

 private void addData() {        list = new ArrayList<>();        list.add(R.mipmap.ic_launcher);        list.add(R.mipmap.ic_launcher);        list.add(R.mipmap.ic_launcher);        list.add(R.mipmap.ic_launcher);    }

//倒计时方法

 /**     * 倒计时 方法     */    private void initTimer() {        timer = new Timer();        TimerTask task=new TimerTask() {            @Override            public void run() {                handler.sendEmptyMessage(0);            }        };        timer.schedule(task,2000,2000);    }

  /**     * 加点     */    private void jiadian() {        for (int i = 0; i < list.size(); i++) {            ImageView iv=new ImageView(getActivity());            if(i==0){                iv.setImageResource(R.drawable.select);            }else {                iv.setImageResource(R.drawable.nomore);            }            //ll.removeAllViews();            LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(15,15);            params.setMargins(5,0,5,0);            ll.addView(iv,params);            listIv.add(iv);        }    }

 /**     * viewPage设置     */    private void viewPage() {        //设置适配器        vp.setAdapter(new PagerAdapter() {            @Override            public int getCount() {                return Integer.MAX_VALUE;            }            @Override            public boolean isViewFromObject(View view, Object object) {                return view==object;            }            @Override            public Object instantiateItem(ViewGroup container, int position) {                ImageView iv=new ImageView(getActivity());                iv.setScaleType(ImageView.ScaleType.CENTER_CROP);                iv.setImageResource(list.get(position%list.size()));                container.addView(iv);                return iv;            }            @Override            public void destroyItem(ViewGroup container, int position, Object object) {                container.removeView((View) object);            }        });    }
 /**     * 添加 自动轮播的 所有布局 以及 加点 等操作     */    private void tianjiaView() {        jiadian(); //加点        viewPage();//ViewPage 适配器        vp.setCurrentItem(10000);        curr=vp.getCurrentItem();        //设置监听        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                //轮播滑动监听                for (int i = 0; i <listIv.size() ; i++) {                    if(position%list.size()==i){//判断选中当前                        listIv.get(i).setImageResource(R.drawable.select);                    }else {                        listIv.get(i).setImageResource(R.drawable.nomore);                    }                }            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }
//最后关闭线程
@Override    public void onDestroy() {        super.onDestroy();        timer.cancel();    }

//这个是加载到ListView 头部 , 在哪个布局 findViewByid
View hand=View.inflate(getActivity(),R.layout.viewpge,null);                vp= hand. findViewById(R.id.vp);                ll= hand. findViewById(R.id.lld);                //添加布局                tianjiaView();                ada.addHeaderView(hand);

//倒计时

 initTimer();

//先走添加布局的方法 tianjiaView() -> 设置适配器 加载完数据 页面展示出来  ->调用倒计时方法



原创粉丝点击