RollViewPager库源github地址
轮播图在我们开发中经常使用,RollViewPager库是我使用比较好用的一个库,下面给大家介绍一下使用
主要功能
支持无限循环。 触摸时会暂停播放,直到结束触摸一个延迟周期以后继续播放。 看起来就像这样。指示器可以为点可以为数字还可以自定义,位置也可以变。
效果图
在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(请点击这里)
如果你觉得我写的可以,请点个赞