美文网首页
App启动页,导航页以及启动黑屏问题

App启动页,导航页以及启动黑屏问题

作者: AJoyce_ | 来源:发表于2016-10-13 15:17 被阅读1544次

    防彩之云APP启动页和导航页,并解决了启动黑屏问题;本文适合初学者阅读。

    效果图:
    guide.gif

    一:启动页

    • 2秒后进入主界面或者导航页
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            //判断是不是第一次启动此应用,第一次启动进入GuideActivity,否则直接进入MainActivity
            if (!SPUtil.getBoolean(Constant.SP_IS_FIRST_LOGIN, false)) {
                StartActivityUtil.startActivity(LaunchActivity.this, GuideActivity.class);
            }else {
                StartActivityUtil.startActivity(LaunchActivity.this, MainActivity.class);
            }
            finish();
        }
    }, 2 * 1000);
    
    • 启动黑屏问题
      我们常见的app启动样式有1.点击应用1-3秒后才会弹出启动界面2.有的点击后立即就弹出启动界面,还有的点击后会出现黑屏,白屏的问题。
      • 方法一:给app的启动页设置图片背景,此时点击应用会立即启动
    <!--窗体背景,这个背景能在第一时间显示, 避免启动时白屏-->
    <style name="LaunchTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:background">@drawable/img_launch</item>
        <item name="android:windowFullscreen">true</item>
    </style>
    
     * 方法二:设置背景为透明色,此时有启动延迟的感觉,其实应用早已启动了,只是背景透明的,看到的还是手机桌面罢了。
    
    <!--窗体背景,这个背景能在第一时间显示, 避免启动时白屏-->
    <style name="LaunchTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowFullscreen">true</item>
    </style>
    

    二:导航页

    • 引导页
      此处用四张图片来做引导页面,同时在最后一个页面提供一个按钮,点击进入主界面。
    //把引导页加入到集合中,views是一个ArrayList
    LayoutInflater inflater = LayoutInflater.from(this);
    views.add(inflater.inflate(R.layout.view_guide_01, null));
    views.add(inflater.inflate(R.layout.view_guide_02, null));
    views.add(inflater.inflate(R.layout.view_guide_03, null));
    views.add(inflater.inflate(R.layout.view_guide_04, null));
    

    既然用到了ViewPager,那肯定会用到PagerAdapter并必须实现以下几个方法
    destroyItem(), getCount(), instantiateItem(), isViewFromObject()
    提示一下destroyItem(),instantiateItem()两个方法在高版本上已经过时了,分别把他们的第一个参数换成ViewGroup 即可。

    public class GuidePagerAdapter extends PagerAdapter {
        private List<View> views;
        private Activity activity;
    
        public GuidePagerAdapter(List<View> views, Activity activity) {
            this.views = views;
            this.activity = activity;
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(views.get(position));
        }
    
        @Override
        public int getCount() {
            return (views == null) ? 0 : views.size();
        }
    
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(views.get(position), 0);
            //当滑动到最后一页的时候,监听按钮
            if (position == views.size() - 1) {
                TextView tvEnter = (TextView) container.findViewById(R.id.tv_guide_enter);
    
                tvEnter.setText(String.format(ResUtil.getString(R.string.guide_enter), APPUtil.getVersionName(activity)));
                tvEnter.setOnClickListener(new View.OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        //在此记录曾经浏览过导航页,下次启动将不会进入导航页
                        SPUtil.put(Constant.SP_IS_FIRST_LOGIN, true);
    
                        StartActivityUtil.startActivity(activity, MainActivity.class);
                        activity.finish();
                    }
                });
            }
            return views.get(position);
        }
    
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return (arg0 == arg1);
        }
    }
    

    源码:https://github.com/GitPhoenix/Guide

    相关文章

      网友评论

          本文标题:App启动页,导航页以及启动黑屏问题

          本文链接:https://www.haomeiwen.com/subject/ixpwyttx.html