1. 程式人生 > >Android BGABanner輪播圖元件

Android BGABanner輪播圖元件

BGABanner的GitHub地址:

引用:

dependencies {
    compile 'com.android.support:support-v4:latestVersion'
    //latestVersion是最新的版本號
    compile 'cn.bingoogolapple:bga-banner:[email protected]'
}

佈局檔案新增:

<cn.bingoogolapple.bgabanner.BGABanner
    android:id="@+id/banner_guide_content"
    style="@style
/MatchMatch"
app:banner_pageChangeDuration="1000" app:banner_pointAutoPlayAble="false" app:banner_pointContainerBackground="@android:color/transparent" app:banner_pointDrawable="@drawable/bga_banner_selector_point_hollow" app:banner_pointTopBottomMargin="15dp" app:banner_transitionEffect="alpha"
/>

佈局屬性說明:

<declare-styleable name="BGABanner">
    <!-- 指示點容器背景 -->
    <attr name="banner_pointContainerBackground" format="reference|color" />
    <!-- 指示點背景 -->
    <attr name="banner_pointDrawable" format="reference" />
    <!-- 指示點容器左右內間距 -->
    <attr
name="banner_pointContainerLeftRightPadding" format="dimension" />
<!-- 指示點上下外間距 --> <attr name="banner_pointTopBottomMargin" format="dimension" /> <!-- 指示點左右外間距 --> <attr name="banner_pointLeftRightMargin" format="dimension" /> <!-- 指示器的位置 --> <attr name="banner_indicatorGravity"> <flag name="top" value="0x30" /> <flag name="bottom" value="0x50" /> <flag name="left" value="0x03" /> <flag name="right" value="0x05" /> <flag name="center_horizontal" value="0x01" /> </attr> <!-- 是否開啟自動輪播 --> <attr name="banner_pointAutoPlayAble" format="boolean" /> <!-- 自動輪播的時間間隔 --> <attr name="banner_pointAutoPlayInterval" format="integer" /> <!-- 頁碼切換過程的時間長度 --> <attr name="banner_pageChangeDuration" format="integer" /> <!-- 頁面切換的動畫效果 --> <attr name="banner_transitionEffect" format="enum"> <enum name="defaultEffect" value="0" /> <enum name="alpha" value="1" /> <enum name="rotate" value="2" /> <enum name="cube" value="3" /> <enum name="flip" value="4" /> <enum name="accordion" value="5" /> <enum name="zoomFade" value="6" /> <enum name="fade" value="7" /> <enum name="zoomCenter" value="8" /> <enum name="zoomStack" value="9" /> <enum name="stack" value="10" /> <enum name="depth" value="11" /> <enum name="zoom" value="12" /> </attr> <!-- 提示文案的文字顏色 --> <attr name="banner_tipTextColor" format="reference|color" /> <!-- 提示文案的文字大小 --> <attr name="banner_tipTextSize" format="dimension" /> <!-- 載入網路資料時覆蓋在 BGABanner 最上層的佔位圖 --> <attr name="banner_placeholderDrawable" format="reference" /> <!-- 是否是數字指示器 --> <attr name="banner_isNumberIndicator" format="boolean" /> <!-- 數字指示器文字顏色 --> <attr name="banner_numberIndicatorTextColor" format="reference|color" /> <!-- 數字指示器文字大小 --> <attr name="banner_numberIndicatorTextSize" format="dimension" /> <!-- 數字指示器背景 --> <attr name="banner_numberIndicatorBackground" format="reference" /> <!-- 當只有一頁資料時是否顯示指示器,預設值為 false --> <attr name="banner_isNeedShowIndicatorOnOnlyOnePage" format="boolean" /> <!-- 自動輪播區域距離 BGABanner 底部的距離,用於使指示器區域與自動輪播區域不重疊 --> <attr name="banner_contentBottomMargin" format="dimension"/> </declare-styleable>

使用方式一:
通過傳入資料模型並結合 Adapter 的方式配置資料來源,這種方式主要用於載入網路圖片,以及實現少於3頁時的無限輪播

mContentBanner.setAdapter(new BGABanner.Adapter<ImageView, String>() {
    @Override
    public void fillBannerItem(BGABanner banner, ImageView itemView, String model, int position) {
        Glide.with(MainActivity.this)
                .load(model)
                .placeholder(R.drawable.holder)
                .error(R.drawable.holder)
                .centerCrop()
                .dontAnimate()
                .into(itemView);
    }
});

mContentBanner.setData(Arrays.asList("網路圖片路徑1", "網路圖片路徑2", "網路圖片路徑3"), Arrays.asList("提示文字1", "提示文字2", "提示文字3"));

使用方式二:
通過直接傳入檢視集合的方式配置資料來源,主要用於自定義引導頁每個頁面佈局的情況

List<View> views = new ArrayList<>();
views.add(BGABannerUtil.getItemImageView(this, R.drawable.ic_guide_1));
views.add(BGABannerUtil.getItemImageView(this, R.drawable.ic_guide_2));
views.add(BGABannerUtil.getItemImageView(this, R.drawable.ic_guide_3));
mContentBanner.setData(views);

使用方式三:
通過傳入圖片資源 id 的方式配置資料來源,主要用於引導頁每一頁都是隻顯示圖片的情況

mContentBanner.setData(R.drawable.uoko_guide_foreground_1, R.drawable.uoko_guide_foreground_2, R.drawable.uoko_guide_foreground_3);

使用方式四:
通過自定義 item 佈局的方式來配置資料,用於導航頁的佈局

mContentBanner.setAdapter(new BGABanner.Adapter<CardView, String>() {
            @Override
            public void fillBannerItem(BGABanner banner, CardView itemView, String model, int position) {
                SimpleDraweeView simpleDraweeView = (SimpleDraweeView) itemView.findViewById(R.id.sdv_item_fresco_content);
                simpleDraweeView.setImageURI(Uri.parse(model));
            }
        });
mContentBanner.setData(R.layout.item_fresco, imgs, null);

item的點選事件:

mContentBanner.setDelegate(new BGABanner.Delegate<ImageView, String>() {
    @Override
    public void onBannerItemClick(BGABanner banner, ImageView itemView, String model, int position) {
        Toast.makeText(banner.getContext(), "點選了" + position, Toast.LENGTH_SHORT).show();
    }
});

跳過和進入首頁按鈕點選事件:

mContentBanner.setEnterSkipViewIdAndDelegate(R.id.btn_guide_enter, R.id.tv_guide_skip, new BGABanner.GuideDelegate() {
    @Override
    public void onClickEnterOrSkip() {
        startActivity(new Intent(GuideActivity.this, MainActivity.class));
        finish();
    }
});