解析AndroidProject 引导页 GuideActivity

  • 效果演示

  

  •  布局文件

guide_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context=".ui.activity.GuideActivity">

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/vp_guide_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="30dp" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="30dp">

        <me.relex.circleindicator.CircleIndicator3
            android:id="@+id/cv_guide_indicator"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:ci_drawable="@drawable/guide_indicator_selected"
            app:ci_drawable_unselected="@drawable/guide_indicator_unselected" />

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/btn_guide_complete"
            style="@style/ButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:minWidth="160dp"
            android:text="了解详情"
            android:visibility="invisible" />

    </FrameLayout>

</FrameLayout>
GuideAcitvity.java
public final class GuideActivity extends AppActivity {

    private ViewPager2 mViewPager;
    private CircleIndicator3 mIndicatorView;
    private View mCompleteView;

    private GuideAdapter mAdapter;

    @Override
    protected int getLayoutId() {
        return R.layout.guide_activity;
    }

    @Override
    protected void initView() {
        mViewPager = findViewById(R.id.vp_guide_pager);
        mIndicatorView = findViewById(R.id.cv_guide_indicator);
        mCompleteView = findViewById(R.id.btn_guide_complete);
        setOnClickListener(mCompleteView);
    }

    @Override
    protected void initData() {
        mAdapter = new GuideAdapter(this);
        mAdapter.addItem(R.drawable.guide_1_bg);
        mAdapter.addItem(R.drawable.guide_2_bg);
        mAdapter.addItem(R.drawable.guide_3_bg);
        mViewPager.setAdapter(mAdapter);
        mViewPager.registerOnPageChangeCallback(mCallback);
        mIndicatorView.setViewPager(mViewPager);
    }

    @SingleClick
    @Override
    public void onClick(View view) {
        if (view == mCompleteView) {
            HomeActivity.start(getContext());
            finish();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mViewPager.unregisterOnPageChangeCallback(mCallback);
    }

    private final ViewPager2.OnPageChangeCallback mCallback = new ViewPager2.OnPageChangeCallback() {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (mViewPager.getCurrentItem() == mAdapter.getItemCount() - 1 && positionOffsetPixels > 0) {
                mIndicatorView.setVisibility(View.VISIBLE);
                mCompleteView.setVisibility(View.INVISIBLE);
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            if (state == ViewPager2.SCROLL_STATE_IDLE) {
                boolean last = mViewPager.getCurrentItem() == mAdapter.getItemCount() - 1;
                mIndicatorView.setVisibility(last ? View.INVISIBLE : View.VISIBLE);
                mCompleteView.setVisibility(last ? View.VISIBLE : View.INVISIBLE);
            }
        }
    };
}
  • ViewPager2

博文参考:

 官方viewPage2
 探索取代ViewPager的ViewPager2

⭐viewPage2基于RecycleView ,自然用法也相类似。引导页实现方式,创建一个Adapter,itemview内放置ImageView,绑定每页的引导页图片。

核心代码

mAdapter = new GuideAdapter(this);
        mAdapter.addItem(R.drawable.guide_1_bg);
        mAdapter.addItem(R.drawable.guide_2_bg);
        mAdapter.addItem(R.drawable.guide_3_bg);
        mViewPager.setAdapter(mAdapter);

⭐有关AndroidProject GuideAdatper extends AppAdapter ,extends BaseAdatper 进行一些处理,主要功能是为了实现图片与item布局的绑定,此处代码省略。

  • CircleIndicator3 指示器

  引入依赖

// 指示器框架:https://github.com/ongakuer/CircleIndicator
    implementation 'me.relex:circleindicator:2.1.4'

  核心代码

	indicator.setViewPager(viewpager);
  • 末页隐藏指示器显示按钮

  registerOnPageChangeCallback 页面切换回调

private final ViewPager2.OnPageChangeCallback mCallback = new ViewPager2.OnPageChangeCallback() {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (mViewPager.getCurrentItem() == mAdapter.getItemCount() - 1 && positionOffsetPixels > 0) {
                mIndicatorView.setVisibility(View.VISIBLE);
                mCompleteView.setVisibility(View.INVISIBLE);
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            if (state == ViewPager2.SCROLL_STATE_IDLE) {
                boolean last = mViewPager.getCurrentItem() == mAdapter.getItemCount() - 1;
                mIndicatorView.setVisibility(last ? View.INVISIBLE : View.VISIBLE); //指示器
                mCompleteView.setVisibility(last ? View.VISIBLE : View.INVISIBLE);//按钮
            }
        }
    };
mViewPager.registerOnPageChangeCallback(mCallback);
原文地址:https://www.cnblogs.com/xqz0618/p/14917293.html