安卓 Day 23 :利用视图翻页器实现引导项

一.基础知识

  • 活动(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)全局显示

  • 将这个文件删除
    在这里插入图片描述

(7)运行,查看效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值