在APP中,经常会在一些页面看到可以无限循环滑的Banner位置,可惜苦逼于android原生的控件中并没有提供这样的View,那我们只能另辟蹊径,自己造轮子。其实,这样的自定义控件各路大神都有各种实现方式,还有支持各种炫酷的UI效果以及动画效果。这里总结一下各种实现方案
依赖:
implementation 'com.youth.banner:banner:1.4.10'
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.youth.banner.Banner
android:id="@+id/main_banner"
android:layout_width="match_parent"
android:layout_height="200dp">
</com.youth.banner.Banner>
</RelativeLayout>
之后就是实现的代码由于我用的是网络解析我会标注的:
public class MainActivity extends AppCompatActivity {
//找控件我用的是黄油刀
@BindView(R.id.main_banner)
Banner mainBanner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initView();
}
private void initView() {
initBan();
}
private void initBan() {
//Retrofit网络解析,FoodServer为解析接口,FoodServer.BannerUrl为解析的地址
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(FoodServer.BannerUrl)
.build();
FoodServer myServer = retrofit.create(FoodServer.class);
Observable<BannerBean> data = myServer.getData();
data.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BannerBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(BannerBean bannerBean) {
//接口里找到你所用的集合
//去添加你的适配器
//之后田间到你的Banner里,start开启。
List<BannerBean.DataBean> data1 = bannerBean.getData();
mBan.setImageLoader(new BannerAdapter());
mBan.setImages(data1);
mBan.start();
}
@Override
public void onError(Throwable e) {
//报错有所吐司
Log.e("=======", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
}
});
}
}
这只是直接设置的Banner一般来用的是结合RecyclerView一类的控件使用Banner有很多中用法 这只是其中一种 在此我就不多说了 。