Android之Banner的滚动轮播实现

这次,主要说一下android开发过程中的banner的滚动轮播的实现,并且能够循环,而且我们还可以手动拖动来实现banner图片的切换。我自己设计的时候没有用到圆点,所以大家看到的我也没有对圆点进行总结。

首先是我们的BannerAdapter:

import android.support.v4.view.PagerAdapter;
import android.widget.ImageView;

import java.util.List;

import android.view.View;
import android.view.ViewGroup;

/**
 * Created by Administrator on 2016/8/9 0009.
 */
public class BannerAdapter extends PagerAdapter {

    //数据源
    private List mList;

    public BannerAdapter(List list) {
        this.mList = list;
    }

    @Override
    public int getCount() {
        //取超大的数,实现无线循环效果
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(mList.get(position % mList.size()));
        return mList.get(position % mList.size());
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(mList.get(position % mList.size()));
    }

}
adapter的注释上面有标注,这里注意一下getCount()中的MAX_VALUE,我们去最大值,这样可以实现无限循环。

xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.kegoal.activity.test.IndexActivity">

                    android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        

这是我们的布局,banner使用到的布局,很明显是使用的ViewPager。

接下来就是我们的主Activity了。IndexActivity.class:

import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.adapter.BannerAdapter;

import java.util.ArrayList;
import java.util.List;

public class IndexActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private List mlist;

    private int[] bannerImages = {R.mipmap.login_bg, R.mipmap.login_btn_qq, R.mipmap.login_bg, R.mipmap.login_btn_qq};
    private BannerAdapter mAdapter;
    private BannerListener bannerListener;
    //线程标志
    private boolean isStop = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_index);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        initData();
        initAction();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (!isStop) {
                    SystemClock.sleep(3000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                        }
                    });
                }
            }
        }).start();
    }

    private void initAction() {
        bannerListener = new BannerListener();
        viewPager.setOnPageChangeListener(bannerListener);
        viewPager.setCurrentItem(0);
    }

    private void initData() {
        mlist = new ArrayList();
        for (int i = 0; i < bannerImages.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(bannerImages[i]);
            mlist.add(imageView);
        }
        mAdapter = new BannerAdapter(mlist);
        viewPager.setAdapter(mAdapter);
    }

    class BannerListener implements ViewPager.OnPageChangeListener {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }

    }

    @Override
    protected void onDestroy() {
        //关闭定时器
        isStop = true;
        super.onDestroy();
    }
}

总的来说就这些代码了,实现三秒一切换,就是让一张图片sleep三秒,然后切换。切换的主要逻辑就是viewpager.setCurrentItem()+1 这段代码。相信大家都可以理解。

这样就简单的实现了banner的滚动轮播,banner的图片一般都是通过网络请求到的,但是现在没有进行网络方面的请求,所以暂时先给大家看一下静态的数据吧。

后期这边网络请求后,会对这方面进行更新以及深入的思考。

你可能感兴趣的:(小结)