掌上快递之开机启动篇

启动篇

主要分为开机和功能导航俩部分来总结

先上部分截图图直观感受下

1、开机部分

开机图片比较简单,有个开机图片,图片放在了R.layout.start布局文件中,刚开始老是出现适配问题,后来索性放到LinearLayout的background属性中,然后使用Hnadler创建了一个子线程延时子线程加载后续的跳转Activity(第一次开机跳转功能导航,非第一次跳转主界面)开机的布局文件 R.layout.start(适配比较好)

[html] view plain copy

  1. <span style="font-family:Microsoft YaHei;font-size:14px;"><?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:baiduadsdk="http://schemas.android.com/apk/res/com.weimeijing.feigeshudi"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:background="@drawable/startlogo" >  
  7.   
  8. </LinearLayout></span>  

开机的Activity文件StartActivity.Java

其中引导动画逻辑部分,这里采用SharedPreferences方式记录是否第一次启动,来判断是否进入引导画面开机

[java] view plain copy

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">package com;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.content.SharedPreferences;  
  6. import android.os.Bundle;  
  7. import android.os.Handler;  
  8.   
  9. import com.kaiji.Viewpage_Activity;  
  10. import com.weimeijing.feigeshudi.R;  
  11.   
  12. public class StartActivity extends Activity {  
  13.     private final int SPLASH_DISPLAY_LENGHT = 2000; // 延迟二秒  
  14.   
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.start);//在这个显示开机图片  
  19.         // handler线程延时2秒执行run方法,显示开机图片效果  
  20.         new Handler().postDelayed(new Runnable() {  
  21.             @Override  
  22.             public void run() {  
  23.                 // run方法中SharedPreference就是一个xml文件,里面通过键值对来存储相应的用户的设置及其状态。  
  24.                 SharedPreferences setting = getSharedPreferences(  
  25.                         "CitiGame.ini", 0);  
  26.                 Boolean user_first = setting.getBoolean("FIRST", true);  
  27.                 if (user_first) {  
  28.                     //第一次加载跳转到功能导航界面  
  29.                     <span style="color:#009900;">setting.edit().putBoolean("FIRST", false).commit()</span>;  
  30.                     Intent intent = new Intent(StartActivity.this,  
  31.                             Viewpage_Activity.class);  
  32.                     StartActivity.this.startActivity(intent);  
  33.                     StartActivity.this.finish();  
  34.                 } else {  
  35.                     //非第一次加载直接跳转主界面  
  36.                     Intent mainIntent = new Intent(StartActivity.this,  
  37.                             MainTabActivity.class);  
  38.                     StartActivity.this.startActivity(mainIntent);  
  39.                     StartActivity.this.finish();  
  40.                 }  
  41.   
  42.             }  
  43.   
  44.         }, SPLASH_DISPLAY_LENGHT);  
  45.     }  
  46. }  
  47. </span>  

1.1、知识点

代码注释的很清楚了,这里主要重点提一下

【1】SharedPreferences,它的本质其实就是xml,但是它可以通过键值对来存储用户相应的设置,算是一个轻量级的存储类,SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问。

getSharedPreferences(String name, int mode)

name为本组件的配置文件名( 自己定义,也就是一个文件名),当这个文件不存在时,直接创建,如果已经存在,则直接使用,
mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE
mode指定为MODE_PRIVATE,则该配置文件只能被自己的应用程序访问。
mode指定为MODE_WORLD_READABLE,则该配置文件除了自己访问外还可以被其它应该程序读取。
mode指定为MODE_WORLD_WRITEABLE,则该配置文件除了自己访问外还可以被其它应该程序读取和写入

【2】SharedPreferences使用

它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。 其存储位置在/data/data/<包名>/shared_prefs目录下。
 SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
 实现SharedPreferences存储的步骤如下:   
    一、根据Context获取SharedPreferences对象   
    二、利用edit()方法获取Editor对象。   
    三、通过Editor对象存储key-value键值对数据。   
    四、通过commit()方法提交数据。

【3】代码分析

在创建的SharedPreferences中第一次运行记录为true从而进入第一个if条件进入功能导航:

Boolean user_first = setting.getBoolean("FIRST", true);

然后进入第一个if判断立马将其修改为false:

setting.edit().putBoolean("FIRST", false).commit();

这样下次启动时就直接进入第二个if中直接跳转到主界面

【4】handler开启子线程的达到延时加载的效果

代码中已经表现的很详细了

2、功能导航部分

主要就是采用ViewPager+LayoutInflater (动态加载页面)来实现

主要分为以下2大部分:

2.1、初始化

主要是通过LayoutInflater动态加载导航页面,为了显示效果这里还加入了一些标记圆点,在上图可以看到,代码注释如下

[java] view plain copy

  1. // 用来获取整个View并返回  
  2.         LayoutInflater inflater = getLayoutInflater();  
  3.         pageViews = new ArrayList<View>();  
  4.         pageViews.add(inflater.inflate(R.layout.activity_viewpage1, null));  
  5.         pageViews.add(inflater.inflate(R.layout.activity_viewpage2, null));  
  6.         pageViews.add(inflater.inflate(R.layout.activity_viewpage3, null));  
  7.         pageViews.add(inflater.inflate(R.layout.activity_viewpage4, null));  
  8.         pageViews.add(inflater.inflate(R.layout.activity_viewpage5, null));  
  9.         pageViews.add(inflater.inflate(R.layout.activity_viewpage6, null));  
  10.         // 小圆点数大小是图片的个数  
  11.         imageViews = new ImageView[pageViews.size()];  
  12.         // 从指定xml文件中加载视图  
  13.         viewPictures = (ViewGroup) inflater.inflate(  
  14.                 R.layout.activity_viewpagers, null);  
  15.         viewPager = (ViewPager) viewPictures.findViewById(R.id.guidePagers);  
  16.         viewPoints = (ViewGroup) viewPictures.findViewById(R.id.viewPoints);  
  17.         // 添加小圆点导航图片  
  18.         for (int i = 0; i < pageViews.size(); i++) {  
  19.             imageView = new ImageView(Viewpage_Activity.this);  
  20.             imageView.setLayoutParams(new LayoutParams(20, 20));  
  21.             imageView.setPadding(5, 0, 5, 0);  
  22.             // 把小圆点放进数组  
  23.             imageViews[i] = imageView;  
  24.             // 默认选中的是第一张图片,此时第一个小圆点是选中状态,其他不是  
  25.             if (i == 0)  
  26.                 imageViews[i].setImageDrawable(getResources().getDrawable(  
  27.                         R.drawable.page_indicator_focused));  
  28.             else  
  29.                 imageViews[i].setImageDrawable(getResources().getDrawable(  
  30.                         R.drawable.page_indicator_unfocused));  
  31.             // 将imageViews添加到小圆点视图组  
  32.             viewPoints.addView(imageViews[i]);  
  33.         }  

2.2、PageAdapter——PageView的适配器

跟ListView一样这玩意也需要适配器

PageAdapter 必须重写的四个函数:
    * boolean isViewFromObject(View arg0, Object arg1)
    * int getCount() 
    * void destroyItem(ViewGroup Container, int position,Object object)
    * Object instantiateItem(ViewGroup container, int position)
具体作用如下代码注释:

[java] view plain copy

  1. // 导航view的适配器  
  2.     class NavigationAdapter extends PagerAdapter {  
  3.         // 获取需要滑动view数目  
  4.         @Override  
  5.         public int getCount() {  
  6.             return pageViews.size();  
  7.         }  
  8.   
  9.         @Override  
  10.         public boolean isViewFromObject(View arg0, Object arg1) {  
  11.             return arg0 == arg1;  
  12.         }  
  13.   
  14.         // 2件事情,第一:将当前视图添加到container中,第二:返回当前View  
  15.         @Override  
  16.         public Object instantiateItem(View container, int position) {  
  17.             ((ViewPager) container).addView(pageViews.get(position));  
  18.             return pageViews.get(position);  
  19.         }  
  20.   
  21.         // 销毁每个Item  
  22.         @Override  
  23.         public void destroyItem(View container, int position, Object object) {  
  24.             ((ViewPager) container).removeView(pageViews.get(position));  
  25.         }  
  26.     }  

2.3、知识点

这个部分需要注意以下知识点

【1】ViewPager

ViewPager类提供了多界面切换的新效果,新效果有如下特征:
<1>当前显示一组界面中的其中一个界面;
<2>当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分;
<3>滑动结束后,界面自动跳转到当前选择的界面中

【2】LayoutInflater

动态加载页面,注意与findViewById()的区别

LayoutInflater其实是在res/layout/下找到xml布局文件,并且将其实例化,这个和findViewById()有点相似,后者是找xml布局文件下的具体widget控件(如Button、TextView等)
作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。

转载:http://blog.csdn.net/xsf50717/article/details/47205259

时间: 2024-10-31 00:02:20

掌上快递之开机启动篇的相关文章

掌上快递之主界面篇(1)

概述 整体是通过2个Fragment+FragmentTabHost组合而成,本节主要针对Fragment1做一个总结,该Fragment主要实现以下功能 [1]输入快递单号或者扫描二维码 查询快递信息 [2]侧滑栏集成的百度地图可以显示附近快递点,方便选择合适自己的地点 本篇只总结主界面架构和功能1,先上图有个直观感受 1.主界面结构 Fragment+FragmentTabHost组合而成,其中整体的布局文件是在LinearLayout(vertical)的布局中嵌入了FrameLayout

掌上快递之主界面篇(2)

概述 这是Fragment1的第二部分内容 侧滑栏,(主要效果是仿QQ效果)使用了github上的slidingmenu_librarygithub开源控件 效果图如下: [1]内容区域会伴随菜单的出现而缩小 [2]侧滑菜单给人的感觉是隐藏在内容的后面,而不是拖出来的感觉 [3]侧滑菜单有一个缩放以及透明度的效果 然后就是简单的百度地图,和摇一摇显示小知识 1.布局文件 include在fragment1的主布局文件R.layout.activity_main中      <include la

掌上快递之主界面篇(3)

概述 这篇比较简单,就是收藏自己的快递信息以后随便查阅进度,界面找了一些小logo显得比较干净整洁,数据库部分处理是使用了Xutil中的DbUtils部分来处理 1.快递收藏效果 在MyExpressActivity.Java中的写了一个适配器 MyExpressAdapter adapter;,进入MyExpressAdapter.java中可以看出它继承BaseAdapter,其中核心是在getview部分 [java] view plain copy @Override       pub

安卓开发-安卓应用无法开机启动

问题描述 安卓应用无法开机启动 最近在做一个电视看板.安装在安卓智能电视,或者电视盒子上.要求开机启动Activity. 收听开机广播的权限加了,receiver也已经声明.测试手机是Color os的一加手机.已经 将应用设置为开机启动项,但是收听不到开机广播,无法开机启动. 请问面对不同的定制系统该怎么做? 解决方案 Android 3.1之后,加入了一个Application的Stop State机制,如果App是这种状态,BOOT__COMPLETED是收不到, Application的

在android系统上写C语言程序--开机启动该程序不进入安卓系统

     今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的.如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直接说实用的,怎么用这个东西.      关于这个问题,相信很多学Android的都会去关注这个问题,大家普遍会有个这样的疑问:安卓是怎么跑起来的?     最简单的说法,安卓系统是这样加载的:     Bootloader------Kernel(对应平台版本的Linux内核)------

Linux上PPTP VPN的一键安装以及设置开机启动的方法

  设置pptp vpn 开机启动 有的人懒的重启后手动开启服务,所以下面我再补上开机自动启动pptp vpn 和 iptables的命令 代码如下: #chkconfig pptpd on //开机启动pptp vpn服务 #chkconfig iptables on //开机启动iptables 贴个openvz的pptp vpn 一件安装包吧:centos,fedora,redhat 6.x 使用的脚本(vps上从没安装过的可以试试这个脚本): 点击下载 代码如下: #!/bin/bash

开机启动-数据库和应用都装在一台服务器上同时设置开机自动启动会有问题吗?

问题描述 数据库和应用都装在一台服务器上同时设置开机自动启动会有问题吗? 会不会出现数据库还没启动完成应用就启动了,然后连不上数据库就出错了? 解决方案 数据库能否连上,不是数据库软件启动,而是服务,即使你没有进入windows,sqlserver的服务也起来了,你一样能连接,当然,也不排除,应用启动迅速,而服务还未准备好的情况 解决方案二: 肯定要保证数据库服务先正常启动的前提下再启动数据库 解决方案三: 对,服务在开机启动,一般不会连不上耳朵 解决方案四: win7以后,服务,启动应用程序,

移动健康App春雨掌上医生宣布启动B轮融资

4月9日晚间消息,移动健康App春雨掌上医生今日宣布,A轮实际融资额为300万美元,投资机构为BlueRun(蓝驰创投):同时启动B轮融资,计划融资800万美元.此前春雨掌上医生曾透露,B轮融资将于今年5月启动.而今日的董事会上,春雨掌上医生宣布,A轮实际融资额为200万美元,投资机构为蓝驰创投:B轮融资提前开始,规模为800万美元.春雨方面称,截至上月月底,春雨掌上医生手机应用的装机量已达到150万.此前宣布的最新数字为120万.春雨掌上医生为春雨天下软件公司产品,由网易原副总编辑张锐创办,于

如何在 Ubuntu 中管理开机启动应用

在 Ubuntu 中管理开机启动应用 你曾经考虑过 在 Ubuntu 中管理开机启动应用 吗?如果在开机时,你的 Ubuntu 系统启动得非常缓慢,那么你就需要考虑这个问题了. 每当你开机进入一个操作系统,一系列的应用将会自动启动.这些应用被称为'开机启动应用' 或'开机启动程序'.随着时间的推移,当你在系统中安装了足够多的应用时,你将发现有太多的'开机启动应用'在开机时自动地启动了,它们吃掉了很多的系统资源,并将你的系统拖慢.这可能会让你感觉卡顿,我想这种情况并不是你想要的. 让 Ubuntu