幾乎滿足了你的所有需求,可以深入研究一下。甚至可以自定義banner中子view的佈局
依賴:
dependencies {
//普通版本依賴
implementation 'com.github.xiaohaibin:XBanner:1.7.3'
//androidX 版本使用下面的依賴
implementation 'com.github.xiaohaibin:XBanner:androidx_v1.0.8'
}
權限:
<uses-permission android:name="android.permission.INTERNET" />
控件:
<com.stx.xhb.xbanner.XBanner
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/xbanner"
android:layout_width="match_parent"
android:layout_height="180dp"
app:AutoPlayTime="3000"
app:pointsContainerBackground="#44aaaaaa"
app:pointNormal="@drawable/shape_noraml"
app:pointSelect="@drawable/shape_selected"
app:pointsPosition="RIGHT"
app:tipTextSize="12sp"
app:isShowNumberIndicator="true"
app:isShowIndicatorOnlyOne="true"
app:pageChangeDuration="800"/>
在 Activity 或者 Fragment 中配置
//獲取控件
XBanner mXBanner = (XBanner) findViewById(R.id.xbanner);
mXBanner .setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ScreenUtil.getScreenWidthPix(getContext()) / 2));
//添加輪播圖片數據(圖片數據不侷限於網絡圖片、本地資源文件、View 都可以),刷新數據也是調用該方法
mXBanner.setBannerData(imgesUrl);//setData()方法已過時,推薦使用setBannerData()方法,具體參照demo使用
圖片加載
//加載廣告圖片
mXBanner.loadImage(new XBanner.XBannerAdapter() {
@Override
public void loadBanner(XBanner banner, Object model, View view, int position) {
//1、此處使用的Glide加載圖片,可自行替換自己項目中的圖片加載框架
//2、返回的圖片路徑爲Object類型,你只需要強轉成你傳輸的類型就行,切記不要胡亂強轉!
Glide.with(MainActivity.this).load(((AdvertiseEntity.OthersBean)
model).getThumbnail()).placeholder(R.drawable.default_image).error(R.drawable.default_image).into((ImageView) view);
}
});
監聽廣告 item 的單擊事件
mXBanner.setOnItemClickListener(new XBanner.OnItemClickListener() {
@Override
public void onItemClick(XBanner banner, Object model,View view, int position) {
Toast.makeText(MainActivity.this, "點擊了第"+position+"圖片", Toast.LENGTH_SHORT).show();
}
});
如果需要自定義佈局文件
//setData()方法已過時,推薦使用setBannerData()方法,具體參照demo使用
mXBanner.setBannerData(R.layout.image_fresco,“加載數據集合”);
//設置自定義R.layout.customelayout
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="200dp"
android:text="1"
android:textSize="40dp"
android:gravity="center"
android:textColor="@android:color/white"
android:background="@color/colorYellow"/>
//設置自定義數據
mBanner.loadImage(new XBanner.XBannerAdapter() {
@Override
public void loadBanner(XBanner banner, Object model, View view, int position) {
TextView tvContent = (TextView) view.findViewById(R.id.tv);
tvContent.setText(String.valueOf(position + 1));
view.setBackgroundColor(Color.parseColor((String) model));
}
});
需要圓角
mBanner.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 10);
}
});
//
mBanner.setClipToOutline(true);
都說代碼是最好的老師,如果需要demo
demo 地址