`
dx_job
  • 浏览: 398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android应用程序实现欢迎引导页面的方法实现

 
阅读更多
现在的大多数应用都会有一个欢迎引导页面,

需求分析:
程序安装后第一次启动:
启动页-->功能引导页-->应用主页
以后启动:
启动页-->应用主页

实现原理:

用SharedPreferences实现。
创建一个boolean的变量,默认值为true。
当判断这个变量是true的时候,说明是第一次运行,就跳转到另一个引导页面。
引导页面跳转到最后一张图片时,点击某按钮发生跳转事件,回到MainActivity,此时把变量的值改成false。

引导图效果用ViewPager可以很轻松的实现。

1.布局文件

splash.xml:




    <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=".SplashActivity" >

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="@drawable/welcome_android"
            android:scaleType="centerCrop" />

    </RelativeLayout>

复制代码


guide.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"
        android:orientation="vertical" >

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

        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="24.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" />

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

复制代码


main_activity,.xml默认

what_new_one.xml、what_new_two.xml、what_new_three.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:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:adjustViewBounds="false"
            android:focusable="true"
            android:scaleType="centerCrop"
            android:background="@drawable/guide_350_01" />

    </RelativeLayout>

复制代码


what_new_four.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:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:adjustViewBounds="false"
            android:background="@drawable/guide_350_04"
            android:focusable="true"
            android:scaleType="centerCrop" />

        <ImageView
            android:id="@+id/iv_start_weibo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="108dp"
            android:background="@drawable/whats_new_start_btn"
            android:focusable="true" />

    </RelativeLayout>

复制代码


MainActivity.java不变

SplashActivity.java:





    package cn.eoe.leigo.splash;

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

    /**
    *
    * @{# SplashActivity.java Create on 2013-5-2 下午9:10:01
    *
    *     class desc: 启动画面 (1)判断是否是首次加载应用--采取读取SharedPreferences的方法
    *     (2)是,则进入GuideActivity;否,则进入MainActivity (3)3s后执行(2)操作
    *
    *     <p>
    *     Copyright: Copyright(c) 2013
    *     </p>
    * @Version 1.0
    * @Author <a href="mailto:gaolei_xj@163.com">Leo</a>
    *
    *
    */
    public class SplashActivity extends Activity {
        boolean isFirstIn = false;

        private static final int GO_HOME = 1000;
        private static final int GO_GUIDE = 1001;
        // 延迟3秒
        private static final long SPLASH_DELAY_MILLIS = 3000;

        private static final String SHAREDPREFERENCES_NAME = "first_pref";

        /**
         * Handler:跳转到不同界面
         */
        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);
            setContentView(R.layout.splash);

            init();
        }

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

            // 取得相应的值,如果没有该值,说明还未写入,用true作为默认值
            isFirstIn = preferences.getBoolean("isFirstIn", true);

            // 判断程序与第几次运行,如果是第一次运行则跳转到引导界面,否则跳转到主界面
            if (!isFirstIn) {
                // 使用Handler的postDelayed方法,3秒后执行跳转到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, GuideActivity.class);
            SplashActivity.this.startActivity(intent);
            SplashActivity.this.finish();
        }
    }

复制代码


GuideActivity.java:

 


    package cn.eoe.leigo.splash;

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

    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import cn.eoe.leigo.splash.adapter.ViewPagerAdapter;

    /**
    *
    * @{# GuideActivity.java Create on 2013-5-2 下午10:59:08
    *
    *     class desc: 引导界面
    *
    *     <p>
    *     Copyright: Copyright(c) 2013
    *     </p>
    * @Version 1.0
    * @Author <a href="mailto:gaolei_xj@163.com">Leo</a>
    *
    *
    */
    public class GuideActivity extends Activity implements OnPageChangeListener {

        private ViewPager vp;
        private ViewPagerAdapter vpAdapter;
        private List<View> views;

        // 底部小点图片
        private ImageView[] dots;

        // 记录当前选中位置
        private int currentIndex;

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

            // 初始化页面
            initViews();

            // 初始化底部小点
            initDots();
        }

        private void initViews() {
            LayoutInflater inflater = LayoutInflater.from(this);

            views = new ArrayList<View>();
            // 初始化引导图片列表
            views.add(inflater.inflate(R.layout.what_new_one, null));
            views.add(inflater.inflate(R.layout.what_new_two, null));
            views.add(inflater.inflate(R.layout.what_new_three, null));
            views.add(inflater.inflate(R.layout.what_new_four, null));

            // 初始化Adapter
            vpAdapter = new ViewPagerAdapter(views, this);

            vp = (ViewPager) findViewById(R.id.viewpager);
            vp.setAdapter(vpAdapter);
            // 绑定回调
            vp.setOnPageChangeListener(this);
        }

        private void initDots() {
            LinearLayout ll = (LinearLayout) findViewById(R.id.ll);

            dots = new ImageView[views.size()];

            // 循环取得小点图片
            for (int i = 0; i < views.size(); i++) {
                dots[i] = (ImageView) ll.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 onPageScrollStateChanged(int arg0) {
        }

        // 当当前页面被滑动时调用
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        // 当新的页面被选中时调用
        @Override
        public void onPageSelected(int arg0) {
            // 设置底部小点选中状态
            setCurrentDot(arg0);
        }

    }

复制代码


ViewPagerAdapter.java:





    package cn.eoe.leigo.splash.adapter;

    import java.util.List;

    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.os.Parcelable;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageView;
    import cn.eoe.leigo.splash.MainActivity;
    import cn.eoe.leigo.splash.R;

    /**
    *
    * @{# ViewPagerAdapter.java Create on 2013-5-2 下午11:03:39
    *
    *     class desc: 引导页面适配器
    *
    *     <p>
    *     Copyright: Copyright(c) 2013
    *     </p>
    * @Version 1.0
    * @Author <a href="mailto:gaolei_xj@163.com">Leo</a>
    *
    *
    */
    public class ViewPagerAdapter extends PagerAdapter {

        // 界面列表
        private List<View> views;
        private Activity activity;

        private static final String SHAREDPREFERENCES_NAME = "first_pref";

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

        // 销毁arg1位置的界面
        @Override
        public void destroyItem(View arg0, int arg1, Object arg2) {
            ((ViewPager) arg0).removeView(views.get(arg1));
        }

        @Override
        public void finishUpdate(View arg0) {
        }

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

        // 初始化arg1位置的界面
        @Override
        public Object instantiateItem(View arg0, int arg1) {
            ((ViewPager) arg0).addView(views.get(arg1), 0);
            if (arg1 == views.size() - 1) {
                ImageView mStartWeiboImageButton = (ImageView) arg0
                        .findViewById(R.id.iv_start_weibo);
                mStartWeiboImageButton.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // 设置已经引导
                        setGuided();
                        goHome();

                    }

                });
            }
            return views.get(arg1);
        }

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

        /**
         *
         * method desc:设置已经引导过了,下次启动不用再次引导
         */
        private void setGuided() {
            SharedPreferences preferences = activity.getSharedPreferences(
                    SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE);
            Editor editor = preferences.edit();
            // 存入数据
            editor.putBoolean("isFirstIn", false);
            // 提交修改
            editor.commit();
        }

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

        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
        }

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

        @Override
        public void startUpdate(View arg0) {
        }

    }

复制代码

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics