关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »Android 引导界面的实现过程

    Android 引导界面的实现过程

    2015-03-15 00:00:00 出处:tornadomeet
    分享

    现在越来越多程序都有引导页面了。网上资料不全。现在自己实现下。

    /**
     * 实现
     * @author dujinyang
     *
     */

    顺序是: OneAcitivity –>MainActivity -> TwoActivity

    然后第2次进去就是:OneActivity -> TwoActivity

    代码里都有注释的了,这里就不多说了。

    OneActivity的代码如下:

    package cn.djy.activity; 
    
    import android.app.Activity; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.os.Handler; 
    
    /**
     * 开机动画
     * @author Administrator
     *
     */ 
    public class OneActivity extends Activity { 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
            // TODO Auto-generated method stub  
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.one); 
    
            boolean flag=this.isFirstEnter(getApplicationContext(), this.getClass().getName()); 
            if(flag) 
                mHandler.sendEmptyMessageDelayed(SWITCH_GUIDACTIVITY,4000); 
            else 
                mHandler.sendEmptyMessageDelayed(SWITCH_TWOACTIVITY, 4000); 
    
        } 
    
        //***********************************************************************  
        //判断应用是否初次加载,读取SharedPreferences 的字段  
        //***********************************************************************  
        private static final String SHAREDPREFERENCES_NAME="yang"; 
        private static final String KEY_GUIDE_ACTIVITY="Open"; 
        /** 
         * mResultStr.equalsIgnoreCase("false") 返回FALSE 
         * TRUE 则为空值 
         * @param context 
         * @param className 
         * @return boolean 
         */ 
        private boolean isFirstEnter(Context context,String className){ 
            if(context==null || className ==null || "".equalsIgnoreCase(className)) return false; 
            String mResultStr=context.getSharedPreferences(SHAREDPREFERENCES_NAME,Context.MODE_WORLD_READABLE).getString(KEY_GUIDE_ACTIVITY, ""); 
            if(mResultStr.equalsIgnoreCase("false")) 
                return false; 
            else 
                return true; 
        } 
    
        //****************************************  
        //Handler:跳转至不同页面  
        //****************************************  
        private final static int SWITCH_TWOACTIVITY=1000; //主页  
    
        private final static int SWITCH_GUIDACTIVITY=1001; //滑动手势  
        private Handler mHandler=new Handler(){ 
            public void handleMessage(android.os.Message msg) { 
                switch (msg.what) { 
                case SWITCH_TWOACTIVITY: 
                        Intent intent=new Intent(); 
                        intent.setClass(OneActivity.this,TwoActivity.class); 
                        OneActivity.this.startActivity(intent); 
                    //  OneActivity.this.finish();  
                    break; 
                case SWITCH_GUIDACTIVITY: 
                        Intent intents=new Intent(); 
                        intents.setClass(OneActivity.this,MainActivity.class); 
                        OneActivity.this.startActivity(intents); 
                    //  OneActivity.this.finish();  
                        break; 
                } 
                super.handleMessage(msg); 
            }; 
        }; 
    
    }
    package cn.djy.activity;
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    /**
     * 开机动画
     * @author Administrator
     *
     */
    public class OneActivity extends Activity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
      setContentView(R.layout.one);
    
      boolean flag=this.isFirstEnter(getApplicationContext(), this.getClass().getName());
      if(flag)
       mHandler.sendEmptyMessageDelayed(SWITCH_GUIDACTIVITY,4000);
      else
       mHandler.sendEmptyMessageDelayed(SWITCH_TWOACTIVITY, 4000);
    
     }
     //***********************************************************************
     //判断应用是否初次加载,读取SharedPreferences 的字段
     //***********************************************************************
     private static final String SHAREDPREFERENCES_NAME="yang";
     private static final String KEY_GUIDE_ACTIVITY="Open";
     /**
      * mResultStr.equalsIgnoreCase("false") 返回FALSE
      * TRUE 则为空值
      * @param context
      * @param className
      * @return boolean
      */
     private boolean isFirstEnter(Context context,String className){
      if(context==null || className ==null || "".equalsIgnoreCase(className)) return false;
      String mResultStr=context.getSharedPreferences(SHAREDPREFERENCES_NAME,Context.MODE_WORLD_READABLE).getString(KEY_GUIDE_ACTIVITY, "");
      if(mResultStr.equalsIgnoreCase("false"))
       return false;
      else
       return true;
     }
    
     //****************************************
     //Handler:跳转至不同页面
     //****************************************
     private final static int SWITCH_TWOACTIVITY=1000; //主页
    
     private final static int SWITCH_GUIDACTIVITY=1001; //滑动手势
     private Handler mHandler=new Handler(){
      public void handleMessage(android.os.Message msg) {
       switch (msg.what) {
       case SWITCH_TWOACTIVITY:
         Intent intent=new Intent();
         intent.setClass(OneActivity.this,TwoActivity.class);
         OneActivity.this.startActivity(intent);
        // OneActivity.this.finish();
        break;
       case SWITCH_GUIDACTIVITY:
         Intent intents=new Intent();
         intents.setClass(OneActivity.this,MainActivity.class);
         OneActivity.this.startActivity(intents);
        // OneActivity.this.finish();
         break;
       }
       super.handleMessage(msg);
      };
     };
    
    }

    MainActivity的代码如下:

    package cn.djy.activity; 
    
    import java.util.ArrayList; 
    
    import android.app.Activity; 
    import android.content.Intent; 
    import android.content.SharedPreferences; 
    import android.os.Bundle; 
    import android.os.Parcelable; 
    import android.support.v4.view.PagerAdapter; 
    import android.support.v4.view.ViewPager; 
    import android.support.v4.view.ViewPager.OnPageChangeListener; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.view.ViewGroup; 
    import android.view.ViewGroup.LayoutParams; 
    import android.widget.Button; 
    import android.widget.ImageView; 
    import android.widget.TwoLineListItem; 
    /**
     * 实现
     * @author dujinyang
     *
     */ 
    public class MainActivity extends Activity { 
    
        private ViewPager _viewpager; 
    
        /**
         * 分页显示的View数组
         */ 
        private ArrayList<View> _pagerlist; 
        private ImageView image; 
    
        /**
         * 小圆点的图片 放进数组
         */ 
        private ImageView[] _imageViews; 
    
        //包裹滑动的图片Linearlayout  
        private ViewGroup _group; 
    
        //包裹小圆点的Linearlayout  
        private ViewGroup _viewPonits; 
    
        /** Called when the activity is first created. */ 
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.start); 
    
            LayoutInflater inflater=getLayoutInflater(); 
            _pagerlist =new ArrayList<View>(); 
            _pagerlist.add(inflater.inflate(R.layout.viewpager_page1,null)); 
            _pagerlist.add(inflater.inflate(R.layout.viewpager_page2,null)); 
    
            //创建Imageviews数组,大小是要显示的图片数量  
            _imageViews =new ImageView[_pagerlist.size()]; 
    
    //        ViewGroup   
            _group =(ViewGroup) inflater.inflate(R.layout.start, null);//加载MAIN.XML  
    
            _viewPonits=(ViewGroup) _group.findViewById(R.id.icon_circle);//加载小圆点的图片  
    
            _viewpager =(ViewPager) _group.findViewById(R.id.guidePages);//android.support.v4.view.ViewPager  
    
            //添加小圆点的图片  
            for (int i = 0; i < _imageViews.length; i++) { 
                 image= new ImageView(this); 
                 //设置小圆点的imageview的参数  
                 image.setLayoutParams(new LayoutParams(20,20));//宽高均为20  
                 image.setPadding(20, 0, 20, 0); 
                 _imageViews[i]=image; 
    
                 //第一张是选中状态  
                 if(i==0){ 
                     _imageViews[i].setBackgroundResource(R.drawable.a2a); 
                 }else{ 
                     _imageViews[i].setBackgroundResource(R.drawable.a1a); 
                 } 
                 _viewPonits.addView(_imageViews[i]); 
            } 
            //显示视图  
            setContentView(_group); 
            _viewpager.setAdapter(new GuidePageAdapter()); 
            _viewpager.setOnPageChangeListener(new GuidePageChangeListener()); 
        } 
    
        void setGuided(){ 
            SharedPreferences shared=getSharedPreferences("yang",0); 
            SharedPreferences.Editor editor=shared.edit(); 
            editor.putString("Open", "false"); 
            editor.commit(); 
        } 
    
        class GuidePageAdapter extends PagerAdapter{ 
    
            @Override 
            public int getCount() { 
                return _pagerlist.size(); 
            } 
    
            //initalization position page  
            @Override 
            public Object instantiateItem(View container, int position) { 
                ((ViewPager)container).addView(_pagerlist.get(position)); 
                if(position==1){ 
                    Button bt=(Button) container.findViewById(R.id.bt_close); 
                    bt.setOnClickListener(new OnClickListener() { 
                        @Override 
                        public void onClick(View v) { 
                            //设置已经引导  
                            setGuided(); 
                            //Intent   
                            Intent intent=new Intent(); 
                            intent.setClass(MainActivity.this,TwoActivity.class ); 
                            MainActivity.this.startActivity(intent); 
                            MainActivity.this.finish(); 
                        } 
                    }); 
    
                } 
                return _pagerlist.get(position); 
            } 
    
            //判断是否由对象生成页面  
            @Override 
            public boolean isViewFromObject(View view, Object obj) { 
                return view==obj; 
            } 
    
            //销毁页面的位置  
            @Override 
            public void destroyItem(View container, int position, Object object) { 
                ((ViewPager)container).removeView(_pagerlist.get(position)); 
            } 
    
            @Override 
            public void finishUpdate(View container) { 
                //finish  
            } 
    
            @Override 
            public void startUpdate(View container) { 
                //start  
            } 
    
            @Override 
            public int getItemPosition(Object object) { 
                //getItemPosition  
                return super.getItemPosition(object); 
            } 
    
            @Override 
            public void restoreState(Parcelable state, ClassLoader loader) { 
                super.restoreState(state, loader); 
                //restore  
            } 
    
            @Override 
            public Parcelable saveState() { 
                return super.saveState(); 
                //save  
            } 
        } 
    
        class GuidePageChangeListener implements OnPageChangeListener{ 
    
            @Override 
            public void onPageScrollStateChanged(int arg0) { 
    
            } 
    
            @Override 
            public void onPageScrolled(int arg0, float arg1, int arg2) { 
    
            } 
    
            @Override 
            public void onPageSelected(int position) { 
                for (int i = 0; i < _imageViews.length; i++) { 
                        _imageViews[position].setBackgroundResource(R.drawable.a2a); 
                        if(position!=i) 
                            _imageViews[i].setBackgroundResource(R.drawable.a1a); 
    
                } 
            } 
    
        } 
    }
    package cn.djy.activity;
    import java.util.ArrayList;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.os.Parcelable;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TwoLineListItem;
    /**
     * 实现
     * @author dujinyang
     *
     */
    public class MainActivity extends Activity {
    
     private ViewPager _viewpager;
    
     /**
      * 分页显示的View数组
      */
     private ArrayList<View> _pagerlist;
     private ImageView image;
    
     /**
      * 小圆点的图片 放进数组
      */
     private ImageView[] _imageViews;
    
     //包裹滑动的图片Linearlayout
     private ViewGroup _group;
    
     //包裹小圆点的Linearlayout
     private ViewGroup _viewPonits;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.start);
    
            LayoutInflater inflater=getLayoutInflater();
            _pagerlist =new ArrayList<View>();
            _pagerlist.add(inflater.inflate(R.layout.viewpager_page1,null));
            _pagerlist.add(inflater.inflate(R.layout.viewpager_page2,null));
    
            //创建Imageviews数组,大小是要显示的图片数量
            _imageViews =new ImageView[_pagerlist.size()];
    
    //        ViewGroup
            _group =(ViewGroup) inflater.inflate(R.layout.start, null);//加载MAIN.XML
    
            _viewPonits=(ViewGroup) _group.findViewById(R.id.icon_circle);//加载小圆点的图片
    
            _viewpager =(ViewPager) _group.findViewById(R.id.guidePages);//android.support.v4.view.ViewPager
    
            //添加小圆点的图片
            for (int i = 0; i < _imageViews.length; i++) {
        image= new ImageView(this);
        //设置小圆点的imageview的参数
        image.setLayoutParams(new LayoutParams(20,20));//宽高均为20
        image.setPadding(20, 0, 20, 0);
        _imageViews[i]=image;
    
        //第一张是选中状态
        if(i==0){
         _imageViews[i].setBackgroundResource(R.drawable.a2a);
        }else{
         _imageViews[i].setBackgroundResource(R.drawable.a1a);
        }
        _viewPonits.addView(_imageViews[i]);
      }
            //显示视图
            setContentView(_group);
            _viewpager.setAdapter(new GuidePageAdapter());
            _viewpager.setOnPageChangeListener(new GuidePageChangeListener());
        }
    
        void setGuided(){
         SharedPreferences shared=getSharedPreferences("yang",0);
         SharedPreferences.Editor editor=shared.edit();
         editor.putString("Open", "false");
         editor.commit();
        }
    
        class GuidePageAdapter extends PagerAdapter{
      @Override
      public int getCount() {
       return _pagerlist.size();
      }
    
      //initalization position page
      @Override
      public Object instantiateItem(View container, int position) {
       ((ViewPager)container).addView(_pagerlist.get(position));
       if(position==1){
        Button bt=(Button) container.findViewById(R.id.bt_close);
        bt.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View v) {
          //设置已经引导
          setGuided();
          //Intent
          Intent intent=new Intent();
          intent.setClass(MainActivity.this,TwoActivity.class );
          MainActivity.this.startActivity(intent);
          MainActivity.this.finish();
         }
        });
    
       }
       return _pagerlist.get(position);
      }
    
      //判断是否由对象生成页面
      @Override
      public boolean isViewFromObject(View view, Object obj) {
       return view==obj;
      }
    
      //销毁页面的位置
      @Override
      public void destroyItem(View container, int position, Object object) {
       ((ViewPager)container).removeView(_pagerlist.get(position));
      }
    
      @Override
      public void finishUpdate(View container) {
       //finish
      }
    
      @Override
      public void startUpdate(View container) {
       //start
      }
    
      @Override
      public int getItemPosition(Object object) {
       //getItemPosition
       return super.getItemPosition(object);
      }
    
      @Override
      public void restoreState(Parcelable state, ClassLoader loader) {
       super.restoreState(state, loader);
       //restore
      }
    
      @Override
      public Parcelable saveState() {
       return super.saveState();
       //save
      }
        }
    
        class GuidePageChangeListener implements OnPageChangeListener{
      @Override
      public void onPageScrollStateChanged(int arg0) {
    
      }
      @Override
      public void onPageScrolled(int arg0, float arg1, int arg2) {
    
      }
      @Override
      public void onPageSelected(int position) {
       for (int i = 0; i < _imageViews.length; i++) {
         _imageViews[position].setBackgroundResource(R.drawable.a2a);
         if(position!=i)
          _imageViews[i].setBackgroundResource(R.drawable.a1a);
    
       }
      }
    
        }
    }

    最后是TWOActivity:这个Activity是显示的内容。

    package cn.djy.activity; 
    
    import android.app.Activity; 
    import android.os.Bundle; 
    
    public class TwoActivity extends Activity{ 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.end); 
        } 
    
    }
    package cn.djy.activity;
    import android.app.Activity;
    import android.os.Bundle;
    public class TwoActivity extends Activity{
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.end);
     }
    }

    主要代码完成。

    里面涉及的drawable图片是小圆点图片。

    下面贴出XML的。

    start.xml

    < xml version="1.0" encoding="utf-8" > 
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        > 
         <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/linear_viewpager"> 
    
            <android.support.v4.view.ViewPager   android:id="@+id/guidePages" android:layout_width="fill_parent"  android:layout_height="wrap_content"/> 
    
         </LinearLayout> 
    
         <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/linear_circle"> 
    
             <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > 
                    <LinearLayout android:id="@+id/icon_circle"  
                                  android:layout_width="fill_parent"  
                                  android:layout_height="wrap_content"  
                                  android:layout_marginBottom="40dip"  
                                  android:layout_alignParentBottom="true"  
                                  android:gravity="center_vertical" 
                                  android:orientation="horizontal"/> 
             </RelativeLayout> 
    
         </LinearLayout> 
    
    </FrameLayout>
    < xml version="1.0" encoding="utf-8" >
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
       <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/linear_viewpager">
    
        <android.support.v4.view.ViewPager  android:id="@+id/guidePages" android:layout_width="fill_parent"  android:layout_height="wrap_content"/>
    
       </LinearLayout>
       <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/linear_circle">
    
         <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" >
           <LinearLayout android:id="@+id/icon_circle"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="40dip"
                android:layout_alignParentBottom="true"
                android:gravity="center_vertical"
                android:orientation="horizontal"/>
         </RelativeLayout>
    
       </LinearLayout>
    
    </FrameLayout>

    其实是用Group把子项包起来作为显示:

    那子项为:

    ViewPager_page1.xml

    <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"  android:orientation="vertical"> 
       <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:text="adfasfasfweqwwfqw'" 
       /> 
     </LinearLayout>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"  android:orientation="vertical">
       <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:text="adfasfasfweqwwfqw'"
       />
     </LinearLayout>

    viewpager_page2.xml

    < 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:orientation="vertical"  
      android:gravity="center"> 
    
      <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="pages222222222222222222"></TextView> 
    
      <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="asdfi14234124" android:id="@+id/bt_close"></Button> 
    </LinearLayout>
    < 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:orientation="vertical"
      android:gravity="center">
    
      <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="pages222222222222222222"></TextView>
    
      <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="asdfi14234124" android:id="@+id/bt_close"></Button>
    </LinearLayout>
    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    电脑屏幕不小心竖起来了?别慌,快捷键搞定

    Destoon 模板存放规则及语法参考

    Destoon系统常量与变量

    Destoon系统目录文件结构说明

    Destoon 系统安装指南

    Destoon会员公司主页模板风格添加方法

    Destoon 二次开发入门

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    IT头条

    Synology 更新 ActiveProtect Manager 1.1 以增强企业网络弹性和合规性

    00:43

    新的 Rubrik Agent Cloud 加速了可信的企业 AI 代理部署

    00:34

    宇树科技 G1人形机器人,拉动一辆重达1.4吨的汽车

    00:21

    Cloudera 调查发现,96% 的企业已将 AI 集成到核心业务流程中,这表明 AI 已从竞争优势转变为强制性实践

    02:05

    投资者反对马斯克 1 万亿美元薪酬方案,要求重组特斯拉董事会

    01:18

    技术热点

    大型网站的 HTTPS 实践(三):基于协议和配置的优化

    ubuntu下右键菜单添加新建word、excel文档等快捷方式

    Sublime Text 简明教程

    用户定义SQL Server函数的描述

    怎么在windows 7开始菜单中添加下载选项?

    SQL Server 2016将有哪些功能改进?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。