赞
踩
一、为什么要用启动页
1、宣传产品
2、预先加载一些耗时的数据,减轻用户等待程序启动的枯燥味
3、对系统进行检测,如是否有网,电量是否充足等等
二、如何做一个启动页
1、以图片作为启动页
(1)很多时候往往是以一张图片作为启动页,在这张图片上写上产品标志,产品名称、产品主要特色、产品的版本信息、公司信息等等这些有关产品宣传的东西等等。
(2)然后对图片做一些动画效果,比如淡入淡出、放大缩小等等。
(3)在对图片做效果的的同时,去预加载一些耗时的数据或对数据库进行升级
2、下面是代码的具体实现
(1)准备一张图片
(2)布局文件loading_activity.xml:在背景图片上放一个遮罩层,代码如下:
```
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/loading"
android:orientation="vertical" >
<!-- 这里的ImageView相当于一个遮罩层 -->
<ImageView
android:id="@+id/loading_img"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:src="#ff000000" />
</LinearLayout>
(3)动态代码LoadingActivity.java如下:
package com.example.loading;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ImageView;
/**
* 启动页:背景图片由暗变清晰
*
*/
public class LoadingActivity extends Activity {
// 图片控件,相当于一个遮罩层,这里是ImageView.其src为黑色
private ImageView mImageView;
//alpha为255时完全不同明,为0时完全同门
int image_alpha = 255;
//日期格式
private static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
// 线程管理类
Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
//刷新遮罩层的透明度
mImageView.setAlpha(image_alpha);
mImageView.invalidate();
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局文件
setContentView(R.layout.loading_activity);
//找到遮罩层
mImageView = (ImageView) findViewById(R.id.loading_img);
// 启动一个子线程去预加载数据
new Thread(new Runnable() {
@Override
public void run() {
//开始时间
long startTime = System.currentTimeMillis();
/**
* 获取当前日期所在的三个月内的日期字符串
*/
//日期集合
List<String> dateStrList = new ArrayList<String>();
//系统自带的日历类
Calendar cal = Calendar.getInstance();
//"天"设置为1号
cal.set(Calendar.DAY_OF_MONTH, 1);
//"小时"设置为0
cal.set(Calendar.HOUR_OF_DAY, 0);
//"分"设置为0
cal.set(Calendar.MINUTE, 0);
//"秒"设置为0
cal.set(Calendar.MILLISECOND, 0);
/**
* 前一个月第一天日期
*/
//减掉一个月
cal.add(Calendar.MONTH, -1);
//前一个月第一天的日期
Date prevDate = cal.getTime();
/**
* 后一个月最后一天
*/
//加两个月
cal.add(Calendar.MONTH, 2);
//最后一天
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
//后一个月最后一天日期
Date nextDate = cal.getTime();
/**
* 恢复为前一个月第一天
*/
//第一天
cal.set(Calendar.DAY_OF_MONTH, 1);
//减两个月
cal.add(Calendar.MONTH, -2);
//计算“前一个月第一天”和“后一个月最后一天”相差的天数
int days = daysBetween(prevDate, nextDate);
//alpha的平均值
int averageAlpha = 255/days;
//临时日期
Date tmpDate = cal.getTime();
do {
try {
Thread.sleep(20);//为了能看到渐变的效果,睡眠20毫秒,让时间长一点
} catch (InterruptedException e) {
e.printStackTrace();
}
String dateStr = dateToString(tmpDate);
//把单个日期放入集合中
dateStrList.add(dateStr);
//更新alpha的值
updateAlpha(averageAlpha);
//增加一天
cal.add(Calendar.DAY_OF_MONTH, 1);
tmpDate = cal.getTime();
} while (!tmpDate.after(nextDate));//临时日期不大于“后一个月最后一天”
//结束时间
long endTime = System.currentTimeMillis();
//相距时间
long times = endTime - startTime;
}
}).start();
}
/**
* 刷新alpha值
*/
public void updateAlpha(int averageAlpha) {
if (image_alpha >= 0) {
image_alpha -= averageAlpha;
} else {
image_alpha = 0;
}
mHandler.sendMessage(mHandler.obtainMessage());
}
/**
* 计算两个日期之间相差的天数
* @param smdate 较小的时间
* @param bdate 较大的时间
* @return 相差天数
* @throws ParseException
*/
public static int daysBetween(Date smdate,Date bdate)
{
try {
smdate=sdf.parse(sdf.format(smdate));
bdate=sdf.parse(sdf.format(bdate));
} catch (Exception e) {
}
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 日期转换为字符串
*/
private String dateToString(Date date){
String dateStr = sdf.format(date);
return dateStr;
}
}
(4)示例代码
启动页.zip
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。