Android轮播图RollViewPager库的使用

RollViewPager库源github地址
轮播图在我们开发中经常使用,RollViewPager库是我使用比较好用的一个库,下面给大家介绍一下使用

主要功能
支持无限循环。 触摸时会暂停播放,直到结束触摸一个延迟周期以后继续播放。 看起来就像这样。指示器可以为点可以为数字还可以自定义,位置也可以变。

效果图

效果图.gif

在build.gradle(app)里添加以下依赖

   //控件绑定
    compile 'com.jakewharton:butterknife:8.8.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.0'
    //轮播图
    compile 'com.jude:rollviewpager:1.4.6'
    //状态栏
    compile 'com.gyf.barlibrary:barlibrary:2.2.7'
    //okhttp
    compile 'com.squareup.okhttp3:okhttp:3.8.1'  //加载网络需要添加下面2个库
    //glide
    compile 'com.github.bumptech.glide:glide:4.0.0'

在build.gradle(Project)里添加以下依赖

buildscript {
    
    repositories {
        google()
        jcenter()
        mavenCentral()//加这个
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta1'
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.0'//添加这里

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

在需要添加轮播图的xml添加如下代码


还可在xml中添加更多设置:

app:rollviewpager_play_delay="3000" 播放间隔时间,单位ms。填0则不播放。默认为0 
app:rollviewpager_hint_gravity="center" 指示器位置,提供left,center,right。默认center
app:rollviewpager_hint_color="#7c7c7c" 指示器背景颜色.默认黑色
app:rollviewpager_hint_alpha="80" 指示器背景透明度。0全透明,255不透明。默认0.
app:rollviewpager_hint_paddingLeft="16dp" 指示器左边距
app:rollviewpager_hint_paddingRight="16dp" 指示器右边距
app:rollviewpager_hint_paddingTop="16dp" 指示器上边距
app:rollviewpager_hint_paddingBottom="16dp" 指示器下边距
一般指定一下间隔时间就好了。

加载本地图片代码如下:

public class TestActivity1 extends BaseActivity {

    @BindView(R.id.mRollPagerView1)
    RollPagerView mRollViewPager1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test1);
        ButterKnife.bind(this);
        initBanner();
    }

    //初始化Banner
    private void initBanner() {
        mRollViewPager1.setAdapter(new ImageNormalAdapter());//设置适配器

        //指示器4兄弟,也就是那小圆点
       /* mRollViewPager1.setHintView(new IconHintView(this,R.drawable.point_focus,R.drawable.point_normal));//自定义指示器
        mRollViewPager1.setHintView(new TextHintView(this));//设置指示器为文字
        mRollViewPager1.setHintView(null);//隐藏指示器*/
        mRollViewPager1.setHintView(new ColorPointHintView(this, Color.YELLOW, Color.WHITE));//设置指示器颜色

     
        mRollViewPager1.setPlayDelay(3000);   //设置播放时间间隔
     
        mRollViewPager1.setAnimationDurtion(500);   //设置透明度

        //点击监听
        mRollViewPager1.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(TestActivity1.this, "你点几了第 " + position + " 图片", Toast.LENGTH_SHORT).show();
            }
        });
    }

    //适配器
    private class ImageNormalAdapter extends StaticPagerAdapter {
        //本地图片资源
        int[] imgs = new int[]{
                R.drawable.img1,
                R.drawable.img2,
                R.drawable.img3,
                R.drawable.img4,
                R.drawable.img5,
        };

        @Override
        public View getView(ViewGroup container, int position) {
            ImageView view = new ImageView(container.getContext());
            view.setScaleType(ImageView.ScaleType.CENTER_CROP);
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            view.setImageResource(imgs[position]);
            return view;
        }
        
        @Override
        public int getCount() {
            return imgs.length;
        }
    }

    //设置透明状态栏
    @Override
    public void statusBarColor() {
        super.statusBarColor();
        mImmersionBar.transparentStatusBar().init();
    }
}

用okhttp+glide加载网络图片代码如下:

public class TestActivity2 extends BaseActivity {

    @BindView(R.id.mRollPagerView2)
    RollPagerView mRollViewPager;
    @BindView(R.id.btn_reduce)
    Button btnReduce;
    @BindView(R.id.btn_add)
    Button btnAdd;

    private ImageNormalAdapter mAdapter;
    private static OkHttpClient client;
    int page=0;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test2);
        ButterKnife.bind(this);
        initBanner();
        //请求图片
        getData(page);
    }
    //上一页下一页点击事件
    @OnClick({R.id.btn_reduce, R.id.btn_add})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_reduce:
                if (page!=0){
                    --page;
                }
                break;
            case R.id.btn_add:
                page++;
                break;
        }
        getData(page);
    }

    private void initBanner() {
        mRollViewPager.setAdapter(mAdapter = new ImageNormalAdapter(mRollViewPager));//设置适配器

        //指示器4兄弟,也就是那小圆点
       /* mRollViewPager.setHintView(new IconHintView(this,R.drawable.point_focus,R.drawable.point_normal));//自定义指示器
        mRollViewPager.setHintView(new TextHintView(this));//设置指示器为文字
        mRollViewPager.setHintView(null);//隐藏指示器*/
        mRollViewPager.setHintView(new ColorPointHintView(this, Color.YELLOW, Color.WHITE));//设置指示器颜色
      /*  
        mRollViewPager.setPlayDelay(3000);//设置播放时间间隔
        mRollViewPager.setAnimationDurtion(500);  //设置透明度*/


        mRollViewPager.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(TestActivity2.this, "你点几了第 " + position + " 图片", Toast.LENGTH_SHORT).show();
            }
        });

    }

    /**
     * 网络请求获得图片url
     * @param page 页码
     */
    public void getData(final int page) {
        client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/" + 5 + "/" + page)
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                Log.i("NetImageActivity", "error:" + e.getMessage());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(TestActivity2.this, "网络请求失败,error:" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                try {
                    String content = response.body().string();
                    Log.i("TestActivity2", "raw data:" + content);
                    JSONObject jsonObject = new JSONObject(content);
                    JSONArray strArr = jsonObject.getJSONArray("results");
                    final String[] imgs = new String[strArr.length()];
                    for (int i = 0; i < strArr.length(); i++) {
                        JSONObject obj = strArr.getJSONObject(i);
                        imgs[i] = obj.getString("url");
                    }
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mAdapter.setImgs(imgs);//添加图片
                        }
                    });
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    }


    //适配器
    private class ImageNormalAdapter extends LoopPagerAdapter {

        String[] imgs = new String[0];
        //添加图片url
        public void setImgs(String[] imgs) {
            this.imgs = imgs;
            notifyDataSetChanged();
        }

        public ImageNormalAdapter(RollPagerView viewPager) {
            super(viewPager);
        }

        @Override
        public View getView(ViewGroup container, int position) {
            ImageView view = new ImageView(container.getContext());
            view.setScaleType(ImageView.ScaleType.CENTER_CROP);
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            Glide.with(TestActivity2.this)//Glide解析url获得图片
                    .load(imgs[position])
                    .into(view);
            return view;
        }


        @Override
        public int getRealCount() {
            return imgs.length;
        }
    }
    //设置透明状态栏
    @Override
    public void statusBarColor() {
        super.statusBarColor();
        mImmersionBar.transparentStatusBar().init();
    }
}

以上就是RollViewPager库的使用方法,对于大部分开发者都能满足需求了,简单方便,
如果你还不明白,我已经把源码上传到github(请点击这里)

如果你觉得我写的可以,请点个赞

你可能感兴趣的:(Android轮播图RollViewPager库的使用)