最近开发引导页,上网查了些实现方法,觉得代码量太多,于是乎,自己撸一套吧.
viewpager+ fragment复用机制实现引导页,具体代码如下;
activity代码如下:
package com.pactera.dongfeng;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import com.pactera.dongfeng.base.BaseActivity;
import com.pactera.dongfeng.ui.home.adapter.GuideVpAdapter;
import com.pactera.dongfeng.ui.home.fragment.GuideReuseFragment;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
/**
* 引导页
*/
public class GuideActivity extends BaseActivity {
@BindView(R.id.guide_view_pager)
ViewPager mViewPager;
private List<Fragment> mFragmentList = new ArrayList<>();
// 引导页图片资源
private int[] mPics = {R.drawable.guide_one, R.drawable.guide_two, R.drawable.guide_three, R.drawable.guide_four};
private GuideVpAdapter mAdapter;
@Override
public int setLayout() {
return R.layout.activity_guide;
}
@Override
public void initView() {
mAdapter = new GuideVpAdapter(getSupportFragmentManager());
}
@Override
public void initData() {
for (int i = 0; i < mPics.length; i++) {
GuideReuseFragment mFragment = GuideReuseFragment.newInstance(mPics, i);
mFragmentList.add(mFragment);
mAdapter.setFragmentList(mFragmentList);
mViewPager.setAdapter(mAdapter);
}
}
}
activityXML代码如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/guide_image"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
viewpager适配器代码如下:
package com.pactera.dongfeng.ui.home.adapter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;
/**
* @Description: java类作用描述
* @Author: 大魔王老杨
* @Date: 2020-05-26 16:07
*/
public class GuideVpAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragmentList;
public void setFragmentList(List<Fragment> fragmentList) {
mFragmentList = fragmentList;
}
public GuideVpAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int i) {
return mFragmentList.get(i);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
复用的fragment代码如下:
package com.pactera.dongfeng.ui.home.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import com.pactera.dongfeng.R;
import com.pactera.dongfeng.base.BaseFragment;
import com.pactera.dongfeng.ui.login.activity.LoginActivity;
import java.util.Objects;
/**
* @Description: java类作用描述
* @Author: 大魔王老杨
* @Date: 2020-05-26 17:32
*/
public class GuideReuseFragment extends BaseFragment implements View.OnClickListener {
ImageView mGuideImage;
private int[] mPics;
private int mPos;
@Override
public int setLayout() {
return R.layout.fragment_guide;
}
@Override
public void initView(View view) {
mGuideImage = view.findViewById(R.id.guide_image);
}
@Override
public void initData() {
Bundle bundle = this.getArguments();
if (bundle != null) {
mPics = bundle.getIntArray("guidePic");
mPos = bundle.getInt("position");
}
mGuideImage.setImageResource(mPics[mPos]);
mGuideImage.setOnClickListener(this);
}
/**
* fragment复用
*/
public static GuideReuseFragment newInstance(int[] mPics, int position) {
Bundle bundle = new Bundle();
bundle.putIntArray("guidePic", mPics);
bundle.putInt("position", position);
GuideReuseFragment mFragment = new GuideReuseFragment();
mFragment.setArguments(bundle);
return mFragment;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.guide_image:
if (mPos == mPics.length - 1) {
Intent mMainIntent = new Intent(getActivity(), LoginActivity.class);
startActivity(mMainIntent);
Objects.requireNonNull(getActivity()).finish();
}
break;
}
}
@Override
public void initImmersionBar() {
}
}
fragment XML代码如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/guide_image"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>