掌上快递之开机启动篇

启动篇

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

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

1、开机部分

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

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

</LinearLayout></span>

开机的Activity文件StartActivity.java

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

<span style="font-family:Microsoft YaHei;font-size:14px;">package com;

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

import com.kaiji.Viewpage_Activity;
import com.weimeijing.feigeshudi.R;

public class StartActivity extends Activity {
	private final int SPLASH_DISPLAY_LENGHT = 2000; // 延迟二秒

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.start);//在这个显示开机图片
		// handler线程延时2秒执行run方法,显示开机图片效果
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				// run方法中SharedPreference就是一个xml文件,里面通过键值对来存储相应的用户的设置及其状态。
				SharedPreferences setting = getSharedPreferences(
						"CitiGame.ini", 0);
				Boolean user_first = setting.getBoolean("FIRST", true);
				if (user_first) {
					//第一次加载跳转到功能导航界面
					<span style="color:#009900;">setting.edit().putBoolean("FIRST", false).commit()</span>;
					Intent intent = new Intent(StartActivity.this,
							Viewpage_Activity.class);
					StartActivity.this.startActivity(intent);
					StartActivity.this.finish();
				} else {
					//非第一次加载直接跳转主界面
					Intent mainIntent = new Intent(StartActivity.this,
							MainTabActivity.class);
					StartActivity.this.startActivity(mainIntent);
					StartActivity.this.finish();
				}

			}

		}, SPLASH_DISPLAY_LENGHT);
	}
}
</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动态加载导航页面,为了显示效果这里还加入了一些标记圆点,在上图可以看到,代码注释如下

// 用来获取整个View并返回
		LayoutInflater inflater = getLayoutInflater();
		pageViews = new ArrayList<View>();
		pageViews.add(inflater.inflate(R.layout.activity_viewpage1, null));
		pageViews.add(inflater.inflate(R.layout.activity_viewpage2, null));
		pageViews.add(inflater.inflate(R.layout.activity_viewpage3, null));
		pageViews.add(inflater.inflate(R.layout.activity_viewpage4, null));
		pageViews.add(inflater.inflate(R.layout.activity_viewpage5, null));
		pageViews.add(inflater.inflate(R.layout.activity_viewpage6, null));
		// 小圆点数大小是图片的个数
		imageViews = new ImageView[pageViews.size()];
		// 从指定xml文件中加载视图
		viewPictures = (ViewGroup) inflater.inflate(
				R.layout.activity_viewpagers, null);
		viewPager = (ViewPager) viewPictures.findViewById(R.id.guidePagers);
		viewPoints = (ViewGroup) viewPictures.findViewById(R.id.viewPoints);
		// 添加小圆点导航图片
		for (int i = 0; i < pageViews.size(); i++) {
			imageView = new ImageView(Viewpage_Activity.this);
			imageView.setLayoutParams(new LayoutParams(20, 20));
			imageView.setPadding(5, 0, 5, 0);
			// 把小圆点放进数组
			imageViews[i] = imageView;
			// 默认选中的是第一张图片,此时第一个小圆点是选中状态,其他不是
			if (i == 0)
				imageViews[i].setImageDrawable(getResources().getDrawable(
						R.drawable.page_indicator_focused));
			else
				imageViews[i].setImageDrawable(getResources().getDrawable(
						R.drawable.page_indicator_unfocused));
			// 将imageViews添加到小圆点视图组
			viewPoints.addView(imageViews[i]);
		}

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)

具体作用如下代码注释:

// 导航view的适配器
	class NavigationAdapter extends PagerAdapter {
		// 获取需要滑动view数目
		@Override
		public int getCount() {
			return pageViews.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		// 2件事情,第一:将当前视图添加到container中,第二:返回当前View
		@Override
		public Object instantiateItem(View container, int position) {
			((ViewPager) container).addView(pageViews.get(position));
			return pageViews.get(position);
		}

		// 销毁每个Item
		@Override
		public void destroyItem(View container, int position, Object object) {
			((ViewPager) container).removeView(pageViews.get(position));
		}
	}

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()方法来获得其中的界面元素。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 10:24:53

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

掌上快递之主界面篇(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部分 @Override public View getView(int position

掌上快递 APP 项目之概述篇

概述 学习Android开发也有一段时间了,利用业余时间独立制作的一款快递类APP软件.大概2个多星期吧,自己将其定位为"集快递信息追踪.附近快递点查询. 快递公司投诉功能为一体的便民生活类快递 app".难度不是非常大,主要是是能够锻炼一下自己近来所学的,这个小项目涉及到前端到后台.从数据模型到网络数据解析,还有百度map,为了使側滑效果好看还使用了slidingmenu_library开源库. 主要实现了下面功能: [1]输入快递单号或者扫描二维码 查询快递信息 [2]收藏当前快递

centos 7 上配置mysql 开机启动详解

之前多次在centos7环境下配置mysql开机自启动出现了错误.现留下篇文章已做记录 一.centos7与centos6相比有什么不同: 1 在centos7中服务不在是用service这个命令来启动与停止,也不再用chkconfig来设置开机启动与否! 在centos7中所有对服务的管理都集中到了systemctl当中:systemctl不再是合之前一样依赖/etc/init.d/下 的脚本,它是通过配置文件来完成对服务的管理的: 二.创建systemctl管理mysql的配置文件: 1 创

虚拟环境上的jupyterhub开机启动设置

为了让jupyterhub 开机启动,或者以服务的方式启动,折腾了好久.环境 ubuntu 16.04anaconda >= 4.5python35 jupyterhub 0.9.4node 6.14.4背景jupyterhub 安装在 conda的虚拟环境中 只有进入该虚拟环境中才能执行jupyterhub命令建立的脚本可以启动jupyterhub#!/bin/bash -lconda activate python35cd /etc/jupyterhubjupyterhub -f /etc/

如何取消Macbook上顽固的开机启动项

博主遇到的一个顽固启动项是Cisco Anyconnect.我只是偶尔需要使用VPN,但是安装了Cisco Anyconnect之后,每次开机它都会启动,很烦人. 1 通过系统设置 首先,博主希望通过一般的系统设置的方法关闭它. 我前后试了三次,都失败了.每次看似把这个开机启动项给删除了,但是只要重启,它还是会出现在Login Items里面. 2 /Library/LaunchAgents/ 之后我又手动移除/Library/LaunchAgents/里面的相关文件.(注意,千万不要删除这个文

怎样取消Macbook上顽固的开机启动项

博主遇到的一个顽固启动项是Cisco Anyconnect.我仅仅是偶尔须要使用VPN.可是安装了Cisco Anyconnect之后,每次开机它都会启动,非常烦人. 1 通过系统设置 首先,博主希望通过一般的系统设置的方法关闭它. 我前后试了三次,都失败了.每次看似把这个开机启动项给删除了,可是仅仅要重新启动.它还是会出如今Login Items里面. 2 /Library/LaunchAgents/ 之后我又手动移除/Library/LaunchAgents/里面的相关文件. (注意,千万不

python 定制windows 开机启动项

最近发现电脑开机速度越来越慢了.准备用python写一个开机启动的小程序: 1:开机后等待12s等待网络连接,之后判断网络,如果还是连接不上,就放弃开机启动的项目. 1:判断开机的日期,如果是周六日的时候就不用开启工作时候的程序了. startup.py =============================== import os,time,datetime # what day is it today? weekday=int(time.strftime("%w")) #sta