Android引导页的简单实现(ConvenientBanner)

引导页是app必备的元素之一。前面一篇文章教了大家使用ConvenientBanner来实现轮播图的实现,其实他还可以用来实现引导页。今天来教大家如何简单的实现。

说明:

一,使用的Androidstudio版本为3.2.1

二,使用的ConvenientBanner版本为2.1.4

github地址为:https://github.com/Bigkoo/Android-ConvenientBanner

展示效果:

Screenr26.gif

现在正式开始

1,在build.gradle中做如下代码1--4步骤所示配置。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.mumu.jsguidepage"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
//1,增加这个东西
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
        maven { url "https://maven.google.com" }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'

    //2,导入design,原因是通用广告栏ConvenientBanner使用了里面的元素
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    //3,butterKnife,不是必须添加,如果你使用的项目使用的是DataBinding,可以不添加该依赖
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    //4,通用广告栏ConvenientBanner
    implementation 'com.bigkoo:ConvenientBanner:2.1.4'
}
####2,在mipmap中增加图片备用
![image.png](https://upload-images.jianshu.io/upload_images/14906070-73b03b7661d3f480.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3,新建一个引导页GuidePageActivity

package com.mumu.jsguidepage;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.bigkoo.convenientbanner.ConvenientBanner;
import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;
import com.bigkoo.convenientbanner.holder.Holder;
import com.bigkoo.convenientbanner.listener.OnPageChangeListener;

import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;

/**
 * author : zlf
 * date   : 2018/11/26
 * blog   :https://www.jianshu.com/u/281e9668a5a6
 */
public class GuidePageActivity extends AppCompatActivity {

    Unbinder unbinder;
    @BindView(R.id.cb_test)
    ConvenientBanner cbTest;
    @BindView(R.id.btn_test)
    Button btnTest;

    private ArrayList arrayList;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide_page);
        unbinder = ButterKnife.bind(this);
        initView();
        initGuidePage();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbinder.unbind();
    }

    private void initView() {
        arrayList = new ArrayList<>();
        arrayList.add(R.mipmap.b1);
        arrayList.add(R.mipmap.b2);
        arrayList.add(R.mipmap.b3);
    }

    private void initGuidePage() {
        cbTest.setPages(new CBViewHolderCreator() {
            @Override
            public Holder createHolder(View itemView) {
                return new LocalImageHolderView(itemView);
            }

            @Override
            public int getLayoutId() {
                //设置加载哪个布局
                return R.layout.item_guide_page;
            }

        }, arrayList)
                .setPageIndicator(new int[]{R.mipmap.ic_page_indicator, R.mipmap.ic_page_indicator_focused})
                .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL)
                .setPointViewVisible(true)
                .setCanLoop(false)
                .setOnPageChangeListener(new OnPageChangeListener() {
                    @Override
                    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

                    }

                    @Override
                    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

                    }

                    @Override
                    public void onPageSelected(int index) {
                        //总共添加了三张图片,如果index为2表示到了最后一张图片,隐藏下面的指示器,显示跳转到主页的按钮
                        if (index == 2) {
                            btnTest.setVisibility(View.VISIBLE);
                            cbTest.setPointViewVisible(false);
                        } else {
                            btnTest.setVisibility(View.GONE);
                            cbTest.setPointViewVisible(true);

                        }
                    }
                });
    }

    @OnClick(R.id.btn_test)
    public void onViewClicked() {
        //跳转到主activity
        Intent intent = new Intent(GuidePageActivity.this, MainActivity.class);
        startActivity(intent);
    }

    /**
     * 轮播图2 对应的holder
     */
    public class LocalImageHolderView extends Holder {
        private ImageView mImageView;

        //构造器
        public LocalImageHolderView(View itemView) {
            super(itemView);
        }

        @Override
        protected void initView(View itemView) {
            mImageView = itemView.findViewById(R.id.iv_guide_page);
            mImageView.setScaleType(ImageView.ScaleType.FIT_XY);
        }

        @Override
        public void updateUI(Integer data) {
            mImageView.setImageResource(data);
        }
    }
}

4,新建GuidePageActivity 对应的xml文件activity_guide_page.xml




    

    

5,新建一个子布局item_guide_page.xml,他在GuidePageActivity 中会使用到。这个子布局随便填写,我因为简单方便只添加了一个imageview来铺满屏幕。




    

6,在\res\values\styles.xml中添加一个launchTheme,来满足铺满整个屏幕的需求



    
    

    

7,在AndroidManifest.xml中修改启动的activity,让app首先打开引导页,给引导页增加launchTheme,然后给mainactivity注册。




    
        
            
                

                
            
        
        
    


8,项目结构和github地址

项目结构:
image.png
demo地址:https://github.com/mamumu/jsGuidePage

如果有发现错误欢迎指正我及时修改,如果有好的建议欢迎留言。如果觉得对你有帮助欢迎给小星星,谢谢。

你可能感兴趣的:(Android引导页的简单实现(ConvenientBanner))