闪屏页+引导页

实现原理:

用SharedPreferences实现。
创建一个boolean的变量,默认值为true。
当判断这个变量是true的时候,说明是第一次运行,就跳转到另一个引导页面,否则进入主页面。

引导页面跳转到最后一张图片时,点击某按钮发生跳转事件,回到MainActivity,此时把变量的值改成false。

引导图效果用ViewPager实现。

下面附上代码:

splash.xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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"    tools:context="com.zn.Activity.SplashActivity">        <ImageView            android:layout_width="match_parent"            android:layout_height="match_parent"            android:adjustViewBounds="true"            android:background="@drawable/w01"            android:scaleType="centerCrop" />

</RelativeLayout>

guid.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"    tools:context="com.zn.Activity.GuidActivity"><android.support.v4.view.ViewPager    android:id="@+id/guid_viewpager"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_alignParentLeft="true"    android:layout_alignParentTop="true"></android.support.v4.view.ViewPager>    <LinearLayout        android:id="@+id/viewgroup"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:layout_marginBottom="38.0dp"        android:orientation="horizontal">        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:clickable="true"            android:padding="15.0dip"            android:src="@drawable/dot" />

        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:clickable="true"            android:padding="15.0dip"            android:src="@drawable/dot" />

        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:clickable="true"            android:padding="15.0dip"            android:src="@drawable/dot" />    </LinearLayout></RelativeLayout>引导页布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical">    <ImageView        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_centerInParent="true"        android:adjustViewBounds="false"        android:focusable="true"        android:scaleType="centerCrop"        android:background="@drawable/guide01"/></LinearLayout>
闪屏页activity:
package com.zn.Activity;

import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Window;

/** * Created by admin on 2016/8/3. */public class SplashActivity extends Activity {    boolean isFirstIn = false;    private static final int GO_HOME = 1000;    private static final int GO_GUIDE = 1001;

    private static final long SPLASH_DELAY_MILLIS = 1000;    private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case GO_HOME:                    goHome();                    break;                case GO_GUIDE:                    goGuide();                    break;            }

            super.handleMessage(msg);        }    };

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);//去标题栏        setContentView(R.layout.activity_splash);        init();    }

    private void init() {        // 读取SharedPreferences中需要的数据        // 使用SharedPreferences来记录程序的使用次数        SharedPreferences preferences = getSharedPreferences(                Icontes.SHAREDPREFERENCES_NAME, MODE_PRIVATE);

        // 取得相应的值,如果没有该值,说明还未写入,用true作为默认值        isFirstIn = preferences.getBoolean("isFirstIn", true);        // 判断程序与第几次运行,如果是第一次运行则跳转到引导界面,否则跳转到主界面        if (!isFirstIn) {            // 使用Handler的postDelayed方法,1秒后执行跳转到MainActivity            mHandler.sendEmptyMessageDelayed(GO_HOME, SPLASH_DELAY_MILLIS);        } else {            mHandler.sendEmptyMessageDelayed(GO_GUIDE, SPLASH_DELAY_MILLIS);        }

    }

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

    private void goGuide() {        Intent intent = new Intent(SplashActivity.this, GuidActivity.class);        SplashActivity.this.startActivity(intent);        SplashActivity.this.finish();    }}引导页activity:
package com.zn.Activity;

import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;

import com.zn.Adapter.ViewPagerApter;

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

public class GuidActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{    private ViewPager viewPager;    private ViewPagerApter viewPagerApter;    private List<View> views;

    //底部小圆点图片    private ImageView[] dots;    //记录当前选中的位置    private int currentIndex;

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

        //初始化页面        initViews();        //初始化底部小圆点        initDots();

    }

    private void initViews(){        LayoutInflater inflater=LayoutInflater.from(this);        views=new ArrayList<View>();        //初始化引导页图片列表        views.add(inflater.inflate(R.layout.layout_item1,null));        views.add(inflater.inflate(R.layout.layout_item2,null));        views.add(inflater.inflate(R.layout.layout_item5,null));

        //初始化Adapter        viewPagerApter=new ViewPagerApter(views,this);

        viewPager= (ViewPager) findViewById(R.id.guid_viewpager);        viewPager.setAdapter(viewPagerApter);        //绑定回调        viewPager.setOnPageChangeListener(this);

    }

    private void initDots(){        LinearLayout linearLayout= (android.widget.LinearLayout) findViewById(R.id.viewgroup);        dots=new ImageView[views.size()];

        //循环获取小点的图片        for (int i=0;i<views.size();i++){            dots[i]= (ImageView) linearLayout.getChildAt(i);            dots[i].setEnabled(true);//

        }        currentIndex=0;        dots[currentIndex].setEnabled(false);//设为白色,即选中状态

    }

    private void setCurrentDot(int position){        if (position<0||position>views.size()-1||currentIndex==position){            return;

        }        dots[position].setEnabled(false);        dots[currentIndex].setEnabled(true);        currentIndex=position;    }

    //当前页面滑动时调用    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    //当前页面选中时调用    @Override    public void onPageSelected(int position) {        //设置底部小圆点选中状态        setCurrentDot(position);

    }

    //滑动状态改变时调用    @Override    public void onPageScrollStateChanged(int state) {

    }}适配器:
package com.zn.Adapter;

import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;

import com.zn.Activity.Icontes;import com.zn.Activity.MainActivity;import com.zn.Activity.R;

import java.util.List;

/** * Created by admin on 2016/8/3. */public class ViewPagerApter extends PagerAdapter {    private List<View> views;    private Activity activity;

    public ViewPagerApter(List<View> views, Activity activity) {        this.views = views;        this.activity = activity;    }

    //销毁position位置的界面    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        ((ViewPager) container).removeView(views.get(position));    }

    //获得当前的页面数    @Override    public int getCount() {        if (views != null) {            return views.size();        }        return 0;    }

    @Override    public void finishUpdate(ViewGroup container) {

    }

    //初始化position的界面    @Override    public Object instantiateItem(ViewGroup container, int position) {        ((ViewPager) container).addView(views.get(position), 0);        if (position == views.size() - 1) {            ImageView mStartWeiboImageButton = (ImageView) container.findViewById(R.id.iv_start_weibo);            mStartWeiboImageButton.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    //设置已经引导                    setGuided();                    SharedPreferences preferences = activity.getSharedPreferences(                            Icontes.SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE);                    SharedPreferences.Editor editor = preferences.edit();                    editor.putBoolean("isFirstIn", false);                    editor.commit();                    goHome();                }            });        }        return views.get(position);    }

    private void goHome() {        //跳转        Intent intent = new Intent(activity, MainActivity.class);        activity.startActivity(intent);        activity.finish();    }

    private void setGuided() {        SharedPreferences preferences = activity.getSharedPreferences(Icontes.SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE);        SharedPreferences.Editor editor = preferences.edit();        //存入数据        editor.putBoolean("isFirstIn", false);        //提交修改        editor.commit();    }

    //判断是否由对象生成界面    @Override    public boolean isViewFromObject(View view, Object object) {        return (view == object);    }

    @Override    public void restoreState(Parcelable state, ClassLoader loader) {

    }

    @Override    public Parcelable saveState() {        return null;    }

    @Override    public void startUpdate(ViewGroup container) {

    }}小圆点xml:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/dark_dot" android:state_enabled="true"/>    <item android:drawable="@drawable/white_dot" android:state_enabled="false"/>

</selector>

开始体验按钮:
<?xml version="1.0" encoding="utf-8"?><selector    xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_pressed="true" android:drawable="@drawable/tiyan" />    <item android:drawable="@drawable/tiyan" /></selector>


时间: 2024-10-21 23:35:21

闪屏页+引导页的相关文章

开屏三兄弟——闪屏/启动页/引导页

开屏三兄弟——闪屏/启动页/引导页 “开屏页”的交互方式其实并不是完全一样的,也承载着完全不同的功能.我们来了解一下它们的真正用法吧. 特别声明:之前把LaunchScreen和SplashScreen写反了,现已更正,感谢各位大大即时指出错误,希望没有误人子弟,以后会仔细查证后再跟大家分享的.orz,给大家磕一个认错. 同时补充了只有Launch Screen一个页面的启动流程. 原链接:https://www.zcool.com.cn/article/ZNzE3Mzgw.html 原文地址:

Android ViewPager欢迎页+引导页+进入首页

1 import android.app.Activity; 2 import android.content.Intent; 3 import android.content.SharedPreferences; 4 import android.content.SharedPreferences.Editor; 5 import android.os.Bundle; 6 import android.os.Handler; 7 8 /** 欢迎界面 */ 9 public class Wel

iOS引导页实现(一)

目前多数app在启动时会有引导页,今天给大家介绍一种比较直观,能够快速实现的引导页实现方法 最终效果就是有一个全屏的引导页,页面底部有UIPageControl 用来指示当前引导页为第几个页面 其中主要使用两个UI控件 UIPageControl *pageControl; //指示当前处于第几个引导页 UIScrollView *scrollView; //用于存放并显示引导页 首先,获取屏幕尺寸 //获取屏幕 宽度.高度 #define SCREEN_FRAME ([UIScreen mai

这交互炸了(三):闪屏页是像云一样消失的

<交互炸了>或许是一系列高端特效教程, 文中会介绍一些比较炫酷的特效,以及实现的思路.特效实现本身也许不会有太大的难度.难点在于实现的思路.一旦思路被打开,特效将很简单实现. 效果项目地址: https://github.com/githubwing/WowSplash 本期是第三期,第二期做的比较草率,好像并不太符合"交互炸了"这一主题,所以以后我会保证质量,而不是为了跟进数量凑数.这次给大家分享的效果是一个闪屏页的效果,效果如下: 有没有眼前一亮?现在许多炫酷的闪屏页或

设置自定义闪屏页

设置自定义闪屏页 by 伍雪颖 UILaunchStoryboardName

Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象,微信每次启动的时候,是直接进入这个启动页面. 我的意思是,很多应用,往往会先白屏停顿一下后再进入启动页面(Splash).为了印证这一点,我把手机上所有的App都点了一遍.选几个例子 如下图: 微信:  斗鱼:  斗鱼和微信是直接进入了,他们的Splash页面. 知乎:  B站:  知乎和B站要先

手机安全卫士——闪屏页相关处理

根据功能模块划分(Android开发推荐此方法) - Activity   mobilesafe.activty    - 后台服务   mobilesafe.service    - 广播接受者 mobilesafe.receiver    - 数据库 mobilesafe.db.dao    - 对象(java bean) mobilesafe.domain/bean    - 自定义控件 mobilesafe.view    - 工具类 mobilesafe.utils    - 业务逻辑

Android 高级UI设计笔记22:Android 指示引导页(带圆点)

1. 引导页: 我们在安装某个软件首次运行时,大部分都会有一个引导页的提示,介绍软件新功能的加入或者使用说明等,支持滑动且下面会有几个圆点,显示共有多少页和当前图片的位置,类似如下效果: 2. 引导页具体实现功能如下: 可以左右滑动图片. 图片的索引圆点显示,看出当前图片所在的位置和图片的数量. 可任意左右滑动. 图片的索引圆点带有动画效果. 最后一页显示按钮,点击进入应用. 3. 引导页实现逻辑过程: 利用ViewPager实现用户引导界面. 在这里,我们需要用到google提到的一个支持包—

用ViewPager为你的APP引导页添加视差滚动(Parallax Scrolling)效果

什么是视差滚动 视差滚动效果是怎样的 如何实现视差滚动效果 1 通过使用ViewPager实现页面的左右滑动 2 ViewPager有办法实现ParallaxScrolling吗 3 ViewPagerPageTransformer如何使用 由视差滚动效果引起的思考 以上仅是个人在开发中收集的经验欢迎大家拍砖 1. 什么是视差滚动? Parallax Scrolling(视差滚动),是一种常见的动画效果.视差一词来源于天文学,但在日常生活中也有它的身影.在疾驰的动车上看风景时,会发现越是离得近的