Android 启动引导页面的实现

现在几乎每个Android应用都有启动页面,那么怎样实现一个启动页面,下面是我的启动页面的实现, 希望对你有帮助!
需求:Android引导页面,一般由三四张图片,简单介绍项目的特点和功能。在最后一张显示进入按钮,点击进入到下一个页面,引导页面只会在第一次启动的时候显示, 之后启动应用从启动页面进入。

下面简单说一下我的实现:
xml:

<?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">


    <ImageView
        android:id="@+id/launcher_img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@mipmap/img_launcher"
        android:scaleType="fitXY"
        android:visibility="gone" />


    <RelativeLayout
        android:id="@+id/splash_layout_guide"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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


        <LinearLayout
            android:id="@+id/splash_view_group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="20dp"
            android:gravity="center"
            android:orientation="horizontal">
        </LinearLayout>

        <Button
            android:id="@+id/btnInto"
            android:layout_width="150dp"
            android:layout_height="42dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="42dp"
            android:background="@drawable/effct_btn_into"
            android:text="进入"
            android:textColor="#FFFFFF"
            android:textSize="16sp"
            android:visibility="gone" />
    </RelativeLayout>
</RelativeLayout>

以上是启动引导页面的布局代码,根布局是一个RelativeLayout,是因为我将启动页面和引导页面放在了一起,首先放了一个ImageView 用于展示启动页面,默认是隐藏的,只有不是第一次启动才会显示。之后是一个RelativeLayout,该布局里面的ViewPager是用来加载引导页面的组件,第二个是LinearLayout 是引导页面的指示器容器,第三个是一个Button,设置参数,可以放在任何位置, 默认是隐藏的, 只有滑动到最后一个页面的时候才会显示。
此代码是设置全屏

//判断是否为第一次启动 
private void initData() {
        boolean isFirst = SharedPreferencesUtil.getBoolean(this, AppConfig.IS_FIRST_LAUNCHER, true);
        if (isFirst) {
            launcherGuide();
        } else {
            launcherSplash();
        }
    }

启动的时候先判断是否为第一次启动,如果是第一次启动, 进入引到页面,否则进入启动页面。

     /×*
     * 引导页面
     */
    private void launcherGuide() {
        launcherImg.setVisibility(View.GONE);
        splashLayoutGuide.setVisibility(View.VISIBLE);
        initIndicator();
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.fadein);
        btnInto.setAnimation(animation);
        adapter = new GuidePagerAdapter();
        splashViewPager.setAdapter(adapter);
        splashViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
            @Override
            public void onPageSelected(int position) {
                if (position == images.length - 1) {
                    btnInto.setVisibility(View.VISIBLE);
                } else {
                    btnInto.setVisibility(View.GONE);
                }
                setCurrentDot(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {}
        });
    }

d以上是引到页面的代码,根布局设置为显示,启动页面的控件隐藏,初始化指示器。对ViewPager 绑定数据,并且注册addOnPageChangeListener监听。重写onPageSelected方法,当position在最后一个的时候,显示进入按钮。

初始化指示器代码如下:

/**
     * 初始化指示器
     */
    private void initIndicator() {

        for (int i = 0; i < images.length; i++) {
            ImageView img = new ImageView(SplashActivity.this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20);
            params.setMargins(10, 0, 10, 0);
            img.setLayoutParams(params);
            if (i == 0) {
                img.setImageDrawable(getResources().
                getDrawable(R.drawable.indicator_sel));
            } else {
                img.setImageDrawable(getResources().getDrawable(R.drawable.indicator_nor));
            }
            splashViewGroup.addView(img);
        }
    }

根据页面的数量 动态添加指示器圆点。并且将第一个设置为当前选中状态。

/**
     * 启动页面
     */
    private void launcherSplash() {
        splashLayoutGuide.setVisibility(View.GONE);
        launcherImg.setVisibility(View.VISIBLE);
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.fadein);
        launcherImg.startAnimation(animation);
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        }, 1000);
    }

启动页面通过定时器延迟一秒跳转到MainActivity.
Android启动页面的核心功能就是如此。

下载源码:SplashActivityDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值