引导页,主要作用在于让用户短时间了解我们的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();
}
});
}
}