Androidバナーカルーセルフレームの実現

(1) バナー依存関係を導入する

Gradle
dependencies {
    ...
    //轮播图依赖
    implementation 'com.youth.banner:banner:1.4.9'
    //glide框架依赖
    implementation 'com.github.bumptech.glide:glide:4.6.1'
}

(2) ネットワーク権限を追加する

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

(3) レイアウトファイル

<com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

(四)Activity

import android.content.Context;
import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.listener.OnBannerListener;
import com.youth.banner.loader.ImageLoaderInterface;

import java.util.ArrayList;
import java.util.List;

public class HomeFragment extends Fragment implements OnBannerListener {
    private Banner banner;
    private List<Integer> image = new ArrayList<>();
//    private List<String> titles = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_home, container, false);
        banner = view.findViewById(R.id.banner);

        initData();
        initView();

        return view;
    }

    private void initData() {
        image.clear();
//        titles.clear();
        image.add(R.drawable.one);
        image.add(R.drawable.two);
        image.add(R.drawable.three);
//        titles.add("山喜欢");
//        titles.add("水喜欢");
//        titles.add("人说的话也喜欢");
    }

    private void initView() {
        //设置指示器位置,小点点
//        banner.setIndicatorGravity(BannerConfig.CENTER);
        //设置图片加载器
        banner.setImageLoader(new MyImageLoader());
        //设置图片集合
        banner.setImages(image);
//        banner.setBannerTitles(titles);
        //设置banner动画效果
//        banner.setBannerAnimation(Transformer.Default);
        //设置是否为自动轮播,默认是“是”
        banner.isAutoPlay(true);
        //设置内置样式,不显示title和小点点指示器
        banner.setBannerStyle(BannerConfig.NOT_INDICATOR);
        //设置轮播时间
        banner.setDelayTime(3000);
        //轮播图的监听
        banner.setOnBannerListener(this);
        //banner设置方法全部调用完毕时最后调用
        banner.start();
    }

    //轮播图监听方法
    @Override
    public void OnBannerClick(int position) {
        Log.i("tag", "你点了第"+position+"张轮播图");
    }


    //图片加载器
    private class MyImageLoader implements ImageLoaderInterface {
        @Override
        public void displayImage(Context context, Object path, View imageView) {

            Glide.with(context).load(path).into((ImageView) imageView);
        }

        @Override
        public View createImageView(Context context) {
            return null;
        }
    }
}

エフェクト画像(録画した画像が点滅し続ける理由はわかりませんが、実際には良いものです):

 ちなみに、Bannerのよく使われるメソッド、プロパティ、定数を紹介します。

(1) 方法

メソッド名

説明

setBannerStyle(int BannerStyle)

カルーセル スタイルを設定します (デフォルトは CIRCLE_INDICATOR)

setIndicatorGravity(int型)

インジケーターの位置を設定します(タイトルがない場合はデフォルトが右、タイトルがある場合はデフォルトが左)

isAutoPlay(ブール値 isAutoPlay)

自動回転するかどうかを設定します(デフォルトは自動)

startAutoPlay()

カルーセルを開始します

stopAutoPlay()

エンドカルーセル

星()

バナーのレンダリングを開始する

setOffscreenPageLimit(int 制限)

ビューページャ方式と同じ

setBannerTitles(タイトルのリスト)

カルーセルに表示する対応するタイトルと画像を設定します(渡されない場合、デフォルトではタイトルは表示されません)

setDelayTime(整数時間)

カルーセル画像の間隔時間を設定します (ミリ秒単位、デフォルトは 2000)

setImages(Object[]/List<?>imagesUrl)

カルーセル画像の設定 (すべてのパラメータ設定メソッドはこのメソッドの前に実行されます)

setImages(Object[]/List<?>imagesUrl,OnLoadImageListener linstener)

カルーセル画像を設定し、画像の読み込み方法をカスタマイズする

setOnBannerClickListener(this)

クリックイベントを設定します。添字は1から始まります

setOnLoadImageLinstener(this)

画像読み込みイベントを設定し、画像読み込み方法をカスタマイズできます

setImageLoader(オブジェクトはImageLoaderを実装します)

画像ローダーの設定

setOnPageChangeListener(this)

ビューページャーのスライディングモニターを設定する

setBannerAnimation(Class<? extends PageTransformer> トランスフォーマー)

ビューページャのデフォルトのアニメーションを設定する

setPageTansformer(boolean reverseDrawingOrder,ViewPager.PageTransformer トランスフォーマー)

ビューページャーのカスタム アニメーションを設定する

(2) Attributes 属性 (バナー レイアウト ファイル内で呼び出されます):

属性

形状

説明

遅延時間

整数

カルーセル実行時間、デフォルトは 2000

is_auto_play

ブール値

自動的に回転するかどうか、デフォルトは true

タイトルの背景

参照

タイトルテキストの色

タイトルのフォントの色

タイトルのテキストサイズ

寸法

タイトルのフォントサイズ

タイトルの高さ

寸法

タイトルバーの高さ

インジケーターの幅

寸法

インジケーターの円形ボタンの幅

インジケーターの高さ

寸法

インジケーターの円形ボタンの高さ

インジケーターマージン

寸法

インジケータ間の間隔

インジケーター描画可能_選択済み

参照

インジケーター選択の効果

インジケーター描画可能_未選択

参照

インジケーターのチェックなしの効果

画像スケールの種類

列挙型

imageviewのscaleTypeと同じ

(3) 定数:

定数名

説明

所属方法

BannerConfig.NOT_INDICATOR

インジケーターとタイトルを表示しない

setBannerStyle

BannerConfig.CIRCLE_INDICATOR

円形のインジケーターを表示

setBannerStyle

BannerConfig.NUM_INDICATOR

デジタルインジケーターを表示

setBannerStyle

BannerConfig.NUM_INDICATOR_TITLE

数値インジケーターとタイトルを表示する

setBannerStyle

BannerConfig.CIRCLE_INDICATOR_TITLE

円形インジケーターとタイトルを表示(縦表示)

setBannerStyle

BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE

显示圆形指示器和标题(水平显示)

setBannerStyle

BannerConfig.LEFT

指示器居左

setIndicatorGravity 

BannerConfig.CENTER

指示器居中

setIndicatorGravity 

BannerConfig.RIGHT

指示器居右

setIndicatorGravity 

(四)动画常量( setBannerAnimation调用):

Transformer.Default

Transformer.Accordion

Transformer.BackgroundToForeground 

Transformer.CubeIn

Transformer.CubeOut 

Transformer.DepthPage 

Transformer.FlipVertical

Transformer.RotateDown 

Transformer.RotateUp 

Transformer.Stack 

Transformer.Tablet 

Transformer.ZoomIn 

Transformer.ZoomOutSlide

おすすめ

転載: blog.csdn.net/L73748196_/article/details/125285563