一.基础知识
- 活动(Activity)
- 按钮(Button)
- 图像视图(ImageView)
- 视图翻页器(ViewPager)
- 消息处理器(Handler)
- 线性布局(LinearLayout)
二.通过实训案例来了解
1.创建安卓项目
- 将主界面MainActivity更名为SplashActivity,将activity_main.xml更名为activity_splash.xml
2.准备图片资源
3.基于模板创建引导页界面
- finish之后就会出现两个
4.基于模板创建主界面
5.创建共享参数工具类
package net.yuanjing.guide;
import android.content.Context;
import android.content.SharedPreferences;
public class ShareUtils {
private static final String NAME = "config";//文件名
private static final int MODE = Context.MODE_PRIVATE;//访问模式
private static SharedPreferences sp;//共享参数
private static SharedPreferences.Editor editor;//编辑器
public static void putBoolean(Context context, String key, boolean value) {
sp = context.getSharedPreferences(NAME, MODE);//获取共享参数
editor = sp.edit();//获取编辑器对象
editor.putBoolean(key, value);//写入数据到指定文件(config.xml)
editor.commit();//提交,确认写操作
}
public static boolean getBoolean(Context context, String key, boolean defaultValue) {
sp = context.getSharedPreferences(NAME,MODE);//获取共享参数
return sp.getBoolean(key, defaultValue);//如果键不存在,那么就返回缺省值defValue
}
}
6.实现欢迎界面功能
(1)布局文件Activity_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/splash_back"
android:gravity="center"
android:orientation="vertical"
tools:context=".SplashActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5">
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center_vertical">
<ImageView
android:id="@+id/iv_car"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginBottom="20dp"
android:background="@mipmap/car" />
</LinearLayout>
</LinearLayout>
- 运行程序,欢迎界面有活动栏
(2)全屏显示欢迎界面
- 在项目清单文件设置
- 此时运行结果
(3)创建动画资源文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="3000"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
<rotate
android:duration="3000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />
</set>
(4)欢迎界面代码SplashActivity.java
package net.yuanjing.guide;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class SplashActivity extends AppCompatActivity {
private Animation animation;//动画对象
private ImageView ivCar;//小车图像视图
private final int DELAY_TIME = 4000;//延迟时间
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//利用布局资源文件设置用户资源文件
setContentView(R.layout.activity_splash);
//通过资源标识符获取控件实例
ivCar = findViewById(R.id.iv_car);
//创建动画
animation = AnimationUtils.loadAnimation(this, R.anim.animator);
//启动动画
ivCar.startAnimation(animation);
//利用消息处理器实现延迟跳转
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = null;
//判读安卓应用,根据安卓应用是否是第一次运行,决定跳转到不同界面
if (isFirstRunning()) {
//创建意图,目标组件是引导页界面
intent = new Intent(SplashActivity.this, GuideActivity.class);
} else {
//创建意图,目标组件是主界面
intent = new Intent(SplashActivity.this, MainActivity.class);
}
//按照意图跳转到目标组件
startActivity(intent);
//关闭启动界面
finish();
}
},DELAY_TIME);
}
/*
判断是否第一次运行
true 就是第一次运行,false就不是第一次运行
*/
private boolean isFirstRunning() {
//从配置文件里获取变量值(如果按键没有取到值,那么肯定是第一次运行,因此defValue一个设置为true)
boolean isFirstRunning = ShareUtils.getBoolean(this,"isFirstRunning",true);
//判读安卓应用是否是第一次运行
if (isFirstRunning) {
//已经运行了第一次,写入数据共享参数配置文件(注意:isFirstRunning = false)
ShareUtils.putBoolean(this,"isFirstRunning",false);
return true;
} else {
return false;
}
}
}
-
在设备文件浏览器的data/data目录里,查看
-
此时运行程序查看结果
-
打开配置文件,查看内容
7.实现引导页界面
(1)三个引导页布局文件
1.第一个引导页界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/page1">
</LinearLayout>
2.第二个引导页界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/page2">
</LinearLayout>
3.第三个引导页界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/page3">
</LinearLayout>
(2)引导页布局资源文件
<?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">
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="15dp"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/point1"
android:layout_width="10dp"
android:layout_height="10dp" />
<ImageView
android:id="@+id/point2"
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<ImageView
android:id="@+id/point3"
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_marginEnd="10dp" />
</LinearLayout>
<Button
android:id="@+id/btn_skip"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_alignParentEnd="true"
android:layout_marginTop="25dp"
android:layout_marginEnd="25dp"
android:background="@drawable/shape_skip"
android:text="@string/skip"
android:textColor="@android:color/white"
android:textSize="20sp" />
</RelativeLayout>
(3)字符串资源文件
<resources>
<string name="app_name">引导页演示</string>
<string name="skip">跳过</string>
<string name="start">开始使用</string>
</resources>
(4)创建背景配置文件
1.开始背景
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#aa00bb" />
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />
<stroke
android:width="0.5dp"
android:color="#787878" />
</shape>
2.结束背景
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#aaaaaa" />
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />
<stroke
android:width="0.5dp"
android:color="#787878" />
</shape>
3.跳过按钮背景配置文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00aadd" />
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
<stroke
android:width="0.5dp"
android:color="#787878" />
</shape>
4.开始使用按钮背景配置文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#886688" />
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
<stroke
android:width="0.5dp"
android:color="#787878" />
</shape>
(5)引导页界面代码
package net.yuanjing.guide;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
public class GuideActivity extends AppCompatActivity {
private ViewPager pager;//视图翻页
private List<View> views = new ArrayList<>();//三个引导页视图
private View view1, view2, view3; // 三个引导页视图
private ImageView point1,point2,point3;//三个圆点视图
private Button btnSkip;//跳过按钮
private Button btnStart;//开始按钮
private GuideAdapter adapter;//引导页适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//利用布局资源文件设置用户界面
setContentView(R.layout.activity_guide);
//初始化用户界面
initView();
//进行事件处理
eventHandling();
}
/*
设置圆点(当前圆点用shape_point_on)
非当前圆点用shape_point_off
*/
private void setPoint(int index) {
point1.setBackgroundResource(R.drawable.shape_point_off);
point2.setBackgroundResource(R.drawable.shape_point_off);
point3.setBackgroundResource(R.drawable.shape_point_off);
switch (index) {
case 1://第一个引导页是当前引导页
point1.setBackgroundResource(R.drawable.shape_point_on);
break;
case 2://第一个引导页是当前引导页
point2.setBackgroundResource(R.drawable.shape_point_on);
break;
case 3://第一个引导页是当前引导页
point3.setBackgroundResource(R.drawable.shape_point_on);
break;
}
}
private void initView() {
// 通过资源标识符获取控件实例
point1 = findViewById(R.id.point1);
point2 = findViewById(R.id.point2);
point3 = findViewById(R.id.point3);
btnSkip = findViewById(R.id.btn_skip);
pager = findViewById(R.id.pager);
// 设置默认图片
setPoint(1);
// 获取引导页视图
view1 = View.inflate(this, R.layout.page1, null);
view2 = View.inflate(this, R.layout.page2, null);
view3 = View.inflate(this, R.layout.page3, null);
btnStart = view3.findViewById(R.id.btn_start);
// 添加到引导页容器
views.add(view1);
views.add(view2);
views.add(view3);
// 创建引导页适配器
adapter = new GuideAdapter(this, views);
// 设置适配器
pager.setAdapter(adapter);
}
private void eventHandling() {
//跳过按钮注册监听器
btnSkip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建意图,目标组件是主界面
Intent intent = new Intent(GuideActivity.this, MainActivity.class);
//按意图启动主界面
startActivity(intent);
//关闭引导页界面
finish();
}
});
//给【视图翻页器】注册监听器
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch (position) {
case 0://第一个引导页是当前引导页
setPoint(1);
btnSkip.setVisibility(View.VISIBLE);
break;
case 1://第二个引导页是当前引导页
setPoint(2);
btnSkip.setVisibility(View.VISIBLE);
break;
case 2://第一个引导页是当前引导页
setPoint(3);
btnSkip.setVisibility(View.GONE);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//给【开始使用】按钮注册监听器
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建意图,目标组件是主界面
Intent intent = new Intent(GuideActivity.this, MainActivity.class);
//按意图启动主界面
startActivity(intent);
//关闭引导页界面
finish();
}
});
}
}
(6)全局显示
- 将这个文件删除