Android进阶之路 - 引导页的详细使用(全屏展示,不显示短暂空白布局)

引导页,主要作用在于让用户短时间了解我们的app作用范围在哪里,同时宣扬自己的品牌或者使用说明。

引导页过渡之后为启动页

Demo下载地址,可查看具体代码,但因个人原因,暂无法运行。

Effect :

准备工作 :
资源文件存储于 res - drawable 下

1.指示器的俩种颜色
guide_indicator_dark.xml (蓝色 - 选取色):


<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <size
        android:width="12dp"
        android:height="12dp"/>
    <solid android:color="#5A99E8"/>
shape>

guide_indicator_light.xml(白色 - 未选取色)


<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <size
        android:width="12dp"
        android:height="12dp"/>
    <solid android:color="#fff"/>
shape>

2.guide_indicator_light.xml(作用于引导页的XML中)


<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/guide_indicator_dark" android:state_enabled="true"/>
    <item android:drawable="@drawable/guide_indicator_light" android:state_enabled="false"/>
selector>

GuidiActivity(主要引导页面,注释的代码,请自动忽略) :

package com.example.yongliu.guideactivity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;

import java.util.ArrayList;
import java.util.List;

/**
 * author  yongliu
 * date  2018/1/18.
 * desc:
 */

public class GuideActivity  extends AppCompatActivity implements View.OnTouchListener {
    private ViewPager mPager;
    private LinearLayout mIndicator;
    private int[] imageViews = {R.mipmap.ic_guide1, R.mipmap.ic_guide2, R.mipmap.ic_guide3, R.mipmap.ic_guide4};
    private List viewLists;
    private int currentPosition;
    private float startX;
    private int prePosition = 0;
    private static SharedPreferences sharedPreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置全屏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_guide_view);

        //初始化sp存储工具
        sharedPreferences = this.getSharedPreferences("shared_files", Context.MODE_PRIVATE);

        viewLists = new ArrayList<>();
        mPager = findViewById(R.id.vp_guide);
        mIndicator = findViewById(R.id.indicator_container);

//        String versionCode = getString("versionCode");
//        if (getVersionCode(this).equals(versionCode)) {
//           enterPage();
//            startActivity(new Intent(GuideActivity.this, MainActivity.class));
//            finish();
//        }

        String status = getString("status");
        //如 不是首次登陆直接进入启动页
        if("first".equals(status)){
            startActivity(new Intent(GuideActivity.this, StartActivity.class));
            finish();
        }else {
            //首次登录
            getViewList();
            mPager.setAdapter(new GuideAdapter(viewLists));
            //添加指示器
            addIndicator();
            //设置
            mPager.setOnTouchListener(this);
            mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                }

                @Override
                public void onPageSelected(int position) {
                    currentPosition = position;
                    mIndicator.getChildAt(prePosition).setEnabled(false);
                    prePosition = position;
                    mIndicator.getChildAt(position).setEnabled(true);
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });
        }
    }

    /**
     * 添加底部 - 指示点
     */
    private void addIndicator() {
        for (int i = 0; i < viewLists.size(); i++) {
            //            1.代码动态添加ImageView布局,
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(20, 20);
            ImageView pointView = new ImageView(this);
            //            2.当不位于第一个圆点时,设置左边距
            if (i != 0) {
                layoutParams.leftMargin = 14;
                pointView.setEnabled(false);
            }
            //            3.设置我们添加的ImageView宽高参数,背景色,同时添加到我们的LinearLayout
            pointView.setLayoutParams(layoutParams);
            pointView.setBackground(getResources().getDrawable(R.drawable.guide_indicator));
            mIndicator.addView(pointView);
        }
    }

    /**
     * 查看用户是否已经登陆过,如果登陆
     * */
//    public void enterPage() {
//        if (!TextUtils.isEmpty(getString("token"))) {
//            startActivity(new Intent(GuideActivity.this, MainActivity.class));
//        } else {
//            startActivity(new Intent(GuideActivity.this, LoginActivity.class));
//        }
//    }

    public void getViewList() {
        for (int imageView : imageViews) {
            ImageView image = new ImageView(this);
            image.setImageResource(imageView);
            image.setScaleType(ImageView.ScaleType.FIT_XY);
            viewLists.add(image);
        }
    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = event.getX();
                break;
            case MotionEvent.ACTION_UP:
                float endX = event.getX();
                int screenWidth = deviceWidth(this);
                if (currentPosition == 3 && startX - endX > screenWidth / 6) {
                    //进入主页
//                    putString("versionCode", getVersionCode(this));
//                    enterPage();
                    putString("status", "first");
                    startActivity(new Intent(GuideActivity.this, StartActivity.class));
                    finish();
                }
                break;
            default:
                break;
        }
        return false;
    }

    /**
     * 简易字符串获取, 仅支持字符串
     */
    public static String getString(String key) {
        return sharedPreferences.getString(key, "");
    }

    /**
     * 简易字符串保存, 仅支持字符串
     */
    public static void putString(String key, String data) {
        sharedPreferences.edit().putString(key, data).apply();
    }

    /**
     * 获取设备宽度(px)
     * @param context context
     * @return int
     */
    public static int deviceWidth(Context context) {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    /**
     * 返回版本号
     * 对应build.gradle中的versionCode
     * @param context context
     * @return String
     */
    public static String getVersionCode(Context context) {
        String versionCode = "";
        try {
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            versionCode = String.valueOf(packInfo.versionCode);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return versionCode;
    }
}

GuideAdapter :

package com.example.yongliu.guideactivity;

import android.view.View;
import android.view.ViewGroup;

import java.util.List;

/**
 * author  yongliu
 * date  2018/1/17.
 * desc:
 */

public class GuideAdapter extends android.support.v4.view.PagerAdapter {
    public List viewList;

    public GuideAdapter(List viewList) {
        this.viewList = viewList;
    }

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

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

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

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

activity_guide_view :


<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000">

<android.support.v4.view.ViewPager
    android:id="@+id/vp_guide"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<LinearLayout
    android:id="@+id/indicator_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:layout_marginBottom="54dp"
    android:gravity="center_horizontal"
    android:orientation="horizontal"/>
FrameLayout>

StartActivity(简陋启动页) :

package com.example.yongliu.guideactivity;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

/**
 * author  yongliu
 * date  2018/1/18.
 * desc:
 */

public class StartActivity extends AppCompatActivity {
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        TextView mBtn = findViewById(R.id.login);
        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(StartActivity.this,"登陆MainActivity",Toast.LENGTH_LONG).show();
                startActivity(new Intent(StartActivity.this,MainActivity.class));
                finish();
            }
        });
    }
}

你可能感兴趣的:(Android进阶之路)