android 图片轮播

implementation 'com.github.bumptech.glide:glide:4.3.1'//图片轮播引入的外部依赖包com.bigkoo:convenientbanner:2.0.5依赖的包
implementation 'com.bigkoo:convenientbanner:2.0.5'//图片轮播引入的外部依赖包
android studio

Gradle 4.1

Android plugin version 3.0.1


package com.test.banner;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.bigkoo.convenientbanner.ConvenientBanner;
import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;
import com.bigkoo.convenientbanner.holder.Holder;
import com.bigkoo.convenientbanner.listener.OnItemClickListener;
import java.lang.reflect.Field;
import java.util.List;
import java.util.ArrayList;
public class MainActivity extends Activity implements ViewPager.OnPageChangeListener, OnItemClickListener {
    private ConvenientBanner convenientBanner;//轮播器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        showBanner();
}


    private void showBanner() {


        List<Integer> images=new ArrayList<>();
        images.add(getResourceId("first",R.drawable.class));//获取drawable路径下以layer1命名的图片的id
        images.add(getResourceId("second",R.drawable.class));
        images.add(getResourceId("default1",R.drawable.class));


        convenientBanner = findViewById(R.id.convenientBanner);
        convenientBanner.setPages(new CBViewHolderCreator<BannerImageHolderView>() {
            @Override
            public BannerImageHolderView createHolder() {
                return new BannerImageHolderView();
            }
        }, images)
                .setPageIndicator(new int[]{R.mipmap.home_ic_page_indicator, R.mipmap.home_ic_page_indicator_focused})//设置页面指示器
                .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL);//设置水平轮播图片
        convenientBanner.setOnPageChangeListener(this);
        convenientBanner.setOnItemClickListener(this);
        convenientBanner.notifyDataSetChanged();
    }

    public class BannerImageHolderView implements Holder<Integer> {
        private ImageView imageView;
        @Override
        public View createView(Context context) {
            imageView = new ImageView(context);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//设置图片视图的显示大小样式
            imageView.setImageResource(R.drawable.default1);//暂时默认播放的图片
            return imageView;
        }

        /**
         * 实现本地图片轮播
         * @param context
         * @param position
         * @param ad  图片资源id
         */
        @Override
        public void UpdateUI(Context context, int position, Integer ad) {
            imageView.setImageResource(ad);//用资源id来设置图片资源
        }
    }

    /**
     * 通过文件名获取资源id的例子,如getResourceId("picterName",R.drawable.class)
     * @param pictureName
     * @param tClass
     * @return
     */
    public static int getResourceId(String pictureName,Class<?> tClass)
    {
        try {
            Field idField = tClass.getDeclaredField(pictureName);
            return idField.getInt(idField);
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    /**
     * 页面改变事件方法
     * This method will be invoked when the current page is scrolled, either as part
     * of a programmatically initiated smooth scroll or a user initiated touch scroll.
     *
     * @param position             Position index of the first page currently being displayed.
     *                             Page position+1 will be visible if positionOffset is nonzero.
     * @param positionOffset       Value from [0, 1) indicating the offset from the page at position.
     * @param positionOffsetPixels Value in pixels indicating the offset from position.
     */
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    /**
     * 页面改变事件方法
     * This method will be invoked when a new page becomes selected. Animation is not
     * necessarily complete.
     *
     * @param position Position index of the new selected page.
     */
    @Override
    public void onPageSelected(int position) {
        Toast.makeText(this,"选择第"+position+"页图片",Toast.LENGTH_SHORT).show();
    }

    /**
     * 页面改变事件方法
     * Called when the scroll state changes. Useful for discovering when the user
     * begins dragging, when the pager is automatically settling to the current page,
     * or when it is fully stopped/idle.
     *
     * @param state The new scroll state.
     * @see ViewPager#SCROLL_STATE_IDLE
     * @see ViewPager#SCROLL_STATE_DRAGGING
     * @see ViewPager#SCROLL_STATE_SETTLING
     */
    @Override
    public void onPageScrollStateChanged(int state) {
        Toast.makeText(this,"页面滚动状态被改变"+state,Toast.LENGTH_SHORT);
    }

    // 实现activity的继续方法,实现图片轮播开始自动翻页
    @Override
    protected void onResume() {
        super.onResume();
        //开始自动翻页
        convenientBanner.startTurning(5000);
    }

    // 停止自动翻页
    @Override
    protected void onPause() {
        super.onPause();
        //停止翻页
        convenientBanner.stopTurning();
    }

    @Override
    public void onItemClick(int position) {

    }
}
 
 

<?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    <com.bigkoo.convenientbanner.ConvenientBanner
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/convenientBanner"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        app:canLoop="true" />


    </LinearLayout>



猜你喜欢

转载自blog.csdn.net/m0_37271466/article/details/80705951