Android启动页

来源:互联网 发布:数据挖掘工具weka教程 编辑:程序博客网 时间:2024/05/18 03:51

一、为什么要用启动页
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

0 0
原创粉丝点击