利用viewpager实现的引导页面,欢迎大家study

引导图可谓是宅男福音啊,下面是gif图展示

android中引导页预加载 android studio引导页_android中引导页预加载


1:首先是创建一个guideActivity

public class GuideActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener, View.OnClickListener {
    private ViewPager viewPager;
    private GuidePagerAdapter pageAdapter;
    private List<View> views;

    private Button enter_btn;

    private ImageView[] points;
    private int pointIds[] = {R.id.point1, R.id.point2, R.id.point3};

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);
        initView();
    }

    private void initView() {
        viewPager = (ViewPager) findViewById(R.id.viewpager);

        initViews();
    }

    private void initViews() {
        LayoutInflater inflate = LayoutInflater.from(this);
        views = new ArrayList<>();
        views.add(inflate.inflate(R.layout.guide_one, null));
        views.add(inflate.inflate(R.layout.guide_two, null));
        views.add(inflate.inflate(R.layout.guide_three, null));

        initPoints();

    }

    private void initPoints() {
        points = new ImageView[views.size()];
        for (int i = 0; i < views.size(); i++) {
            points[i] = (ImageView) findViewById(pointIds[i]);
        }

        initPager();
    }

    private void initPager() {
        pageAdapter = new GuidePagerAdapter(views, this);
        viewPager.setAdapter(pageAdapter);
        viewPager.addOnPageChangeListener(this);


        enter_btn = (Button) views.get(2).findViewById(R.id.enter);
        enter_btn.setOnClickListener(this);
    }


    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        for (int i = 0; i < pointIds.length; i++) {
            if (position == i) {
                points[i].setImageResource(R.drawable.page_select);
            } else {
                points[i].setImageResource(R.drawable.page_unselect);
            }
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    @Override
    public void onClick(View v) {
        startActivity(new Intent(this, MainActivity.class));
        //保存浏览过引导页的标记
        UserSaveUtils.saveBoolean(this, Constant.bunterkey.GUIDE, true);
        finish();
    }
}



2:该activity的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:flipInterval="30"
        android:persistentDrawingCache="animation" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/point1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:src="@drawable/page_select" />

        <ImageView
            android:id="@+id/point2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:src="@drawable/page_unselect" />

        <ImageView
            android:id="@+id/point3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:src="@drawable/page_unselect" />
    </LinearLayout>
</RelativeLayout>



3:然后是这个viewpager的adapter,注意要复写ondestoryItem和instantteItem()这两个方法

public class GuidePagerAdapter extends PagerAdapter {
    private List<View> views;
    private Context context;

    public GuidePagerAdapter(List<View> views, Context context) {
        this.views = views;
        this.context = context;
    }

    @Override
    public int getCount() {
        return views.size();
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(views.get(position));
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(views.get(position));
        return views.get(position);
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
}



4:viewpager的每个页面都是一个view,这个view很简单,布局文件,小编就给出一个吧,因为都是一样的,样式可以自己修改,引导页面最后一张可以添加一个进入主页的按钮,点击的时候保存浏览过引导页的标记

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/guide_three" />

    <Button
        android:id="@+id/enter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        android:background="@null"
        android:text="进入"
        android:textSize="15sp" />
</RelativeLayout>



5:点击进入的时候保存标记

android中引导页预加载 android studio引导页_ide_02

6:添加一个welcomeActivity作为中转,根据保存的标记用于判断是跳入主页还是引导页面

public class WelcomeActivity extends AppCompatActivity {
    private static final int TIME = 2000;
    private static final int GOHOME = 1000;
    private static final int GUIDE = 3000;

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case GOHOME:
                    goHome();
                    break;
                case GUIDE:
                    goGuide();
                    break;
            }
        }
    };

    private void goHome() {
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }

    private void goGuide() {
        startActivity(new Intent(this, GuideActivity.class));
        finish();
    }

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

        boolean isGuide = UserSaveUtils.getBoolean(this, Constant.bunterkey.GUIDE);
        if (isGuide) {
            handler.sendEmptyMessageDelayed(GOHOME, TIME);
        } else {
            handler.sendEmptyMessageDelayed(GUIDE, TIME);
        }
    }
}



7:在数据存储方面,用的是我自己封装好的sharepreference的一个工具类,相信选择Android开发的朋友都使用过,简单。这里也给出来给大家参考啦

public class SaveInfoUtils {

    /**
     * 全局唯一id
     */
    private static final String INSTANCE_ID = "InstanceID";

    private SaveInfoUtils() {
    }

    public static SharedPreferences getSharedPreferences(Context context,
                                                         String spName) {
        SharedPreferences sp;
        if (TextUtils.isEmpty(spName)) {
            sp = PreferenceManager.getDefaultSharedPreferences(context);
        } else {
            sp = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
        }
        return sp;
    }

    /**
     * 获取应用全局id
     *
     */
    public static String getInstanceID(Context context) {
        return getString(context, null, INSTANCE_ID);
    }
    /**
     * SharedPreferences保存全局id的
     *
     * @param value value
     */
    public static void saveInstanceID(Context context, String value) {
        saveString(context, null, INSTANCE_ID, value);
    }
    /**
     * SharedPreferences保存boolean类型的
     *
     * @param name  key
     * @param value value
     */
    public static void saveBoolean(Context context, String name, boolean value) {
        saveBoolean(context, null, name, value);
    }

    public static void saveBoolean(Context context, String spName, String name,
                                   boolean value) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        Editor editor = sp.edit();
        editor.putBoolean(name, value);
        editor.apply();
    }

    /**
     * 获取保上面存的boolean类型的
     *
     * @param name   key
     * @param defuat 默认值
     */
    public static boolean getBoolean(Context context, String name, boolean defuat) {
        return getBoolean(context, null, name, defuat);
    }

    public static boolean getBoolean(Context context, String spName, String name, boolean defuat) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        return sp.getBoolean(name, defuat);
    }

    /**
     * SharedPreferences保存int类型的
     *
     * @param name  key
     * @param value value
     */
    public static void saveInt(Context context, String name, int value) {
        saveInt(context, null, name, value);
    }

    public static void saveInt(Context context, String spName, String name,
                               int value) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        Editor editor = sp.edit();
        editor.putInt(name, value);
        editor.apply();
    }

    /**
     * 获取保上面存的int类型的
     *
     * @param name   key
     * @param defuat 默认值
     */
    public static int getInt(Context context, String name, int defuat) {
        return getInt(context, null, name, defuat);
    }

    public static int getInt(Context context, String spName, String name, int defuat) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        return sp.getInt(name, defuat);
    }

    /**
     * SharedPreferences保存Long类型的
     *
     * @param name  key
     * @param value value
     */
    public static void saveLong(Context context, String name, long value) {
        saveLong(context, null, name, value);
    }

    public static void saveLong(Context context, String spName, String name,
                                long value) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        Editor editor = sp.edit();
        editor.putLong(name, value);
        editor.apply();
    }

    /**
     * 获取保上面存的Long类型的
     *
     * @param name key key
     */
    public static long getLong(Context context, String name, long defuat) {
        return getLong(context, null, name, defuat);
    }

    public static long getLong(Context context, String spName, String name, long defuat) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        return sp.getLong(name, defuat);
    }

    /**
     * SharedPreferences保存Float类型的
     *
     * @param name  key key
     * @param value value value
     */
    public static void saveFloat(Context context, String name, float value) {
        saveFloat(context, null, name, value);
    }

    public static void saveFloat(Context context, String spName, String name,
                                 float value) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        Editor editor = sp.edit();
        editor.putFloat(name, value);
        editor.apply();
    }

    /**
     * 获取保上面存的Float类型的
     *
     * @param name key
     */
    public static float getFloat(Context context, String name, float defuat) {
        return getFloat(context, null, name, defuat);
    }

    public static float getFloat(Context context, String spName, String name, float defuat) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        return sp.getFloat(name, defuat);
    }

    /**
     * SharedPreferences保存String类型的
     *
     * @param name  key
     * @param value value
     */
    public static void saveString(Context context, String name, String value) {
        saveString(context, null, name, value);
    }

    public static void saveString(Context context, String spName, String name,
                                  String value) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        Editor editor = sp.edit();
        editor.putString(name, value);
        editor.apply();
    }

    /**
     * 获取保上面存的String类型的
     *
     * @param name key
     */
    public static String getString(Context context, String name) {
        return getString(context, null, name);
    }

    public static String getString(Context context, String spName, String name) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        String res = sp.getString(name, "");
        if (TextUtils.isEmpty(res)) {
            return "";
        }
        return res;
    }

    /**
     * 删除name对应的一项
     *
     * @param name key
     */
    public static void deleteData(Context context, String name) {
        deleteData(context, null, name);
    }

    public static void deleteData(Context context, String spName, String name) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        Editor editor = sp.edit();
        editor.remove(name);
        editor.apply();
    }

    /**
     * 清除所有保存的SharedPreference的内容
     */
    public static void clear(Context context) {
        clear(context, null);
    }

    /**
     * 清空指定的数据库的所有
     * @param context
     * @param spName
     */
    public static void clear(Context context, String spName) {
        SharedPreferences sp = getSharedPreferences(context, spName);
        Editor editor = sp.edit();
        editor.clear();
        editor.apply();
    }