一个实时显示系统时钟的android应用

这是一个实时显示时钟的应用。
主要点:①如何用方法将数字的每一位拆开;②思考哪些部分是需要循环执行的;③使用了计时器Timer类和Handler类。
实时时钟主要是思路是。获取系统的时间,然后将这个时间拆开来,分别获取每个数字的每一位,例如15时,就将他拆开得到数字1和数字5,然后将这两个数字传递给setImageResource这个方法,来显示图片。在这个过程中我们不断地显示获取系统的时间,然后拆开数字,再传递给setImageResource这个方法。这是个循环的动作,并且需要不停的进行,并且不能停止。这个可以通过计时器来做。拆开数字的方法:取十位数采用整除的方法,例如15/10 = 1。取个位数字采用取余的方法15%10=5。这样就得到了每个数字的每一位。

首先我们需要0-9的数字图片用来显示。
在xml文件下里创建八个ImageView,用来显示时钟,冒号,分钟,冒号,秒钟即HH: MM: SS的格式。
在创建这些ImageView时建议一个一个的创建,每创建一个并改掉ID名称,否则在后期重新调节界面布局时需要重新命名ID,显示图片变乱。
创建每个ImageView类的对象,然后找到这个ImageView对象的所对应的界面上的某一个ImageView,即用findViewById方法。
然后用setImageResource方法设置IImageView显示所要显示的图片。

以下为java代码部分

package com.example.timehhmmss;

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;

public class MainActivity extends Activity 
{   
    ImageView imageView_hour_left;
    ImageView imageView_hour_right;
    ImageView imageView_minute_left;
    ImageView imageView_minute_right;
    ImageView imageView_second_left;
    ImageView imageView_second_right;
    Timer timer = new Timer();
    Handler handle = new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
              androidOsTime = Calendar.getInstance();
              int hour = androidOsTime.get(Calendar.HOUR_OF_DAY);
              int minute =  androidOsTime.get(Calendar.MINUTE);
              int second =  androidOsTime.get(Calendar.SECOND);
              int hour_left = hour/10;
              int hour_right = hour%10;
              int minute_left = minute/10;
              int minute_right = minute%10;
              int second_left = second/10;
              int second_right = second%10; 
              //拆开小时左边的数字和右边的数字,即个位数字和十位数字。其他的依次是分钟,秒钟

            imageView_hour_left.setImageResource(images[hour_left]);
            imageView_hour_right.setImageResource(images[hour_right]);
            imageView_minute_left.setImageResource(images[minute_left]);
            imageView_minute_right.setImageResource(images[minute_right]);
            imageView_second_left.setImageResource(images[second_left]);
            imageView_second_right.setImageResource(images[second_right]);
        }   
    };
    Calendar androidOsTime;

    int[] images ={ R.drawable.number_0,  R.drawable.number_1,                      R.drawable.number_2, R.drawable.number_3, R.drawable.number_4,                       R.drawable.number_5, R.drawable.number_6,R.drawable.number_7, 
R.drawable.number_8, R.drawable.number_9,
                   };
/*  这些代码放在这个地方时错误的,因为这个时间是不断改变的,
 *   我们不断地从系统中获取时间,
 *这段代码需要不断循环,因此这段时间需要放在循环里面。这里是不断地获取系统时间        
 *并且拆开系统时间数字
 */
//    int hour = androidOsTime.get(Calendar.HOUR_OF_DAY);
//      int minute =  androidOsTime.get(Calendar.MINUTE);
//      int second =  androidOsTime.get(Calendar.SECOND);       
//      int hour_left = hour/10;
//      int hour_right = hour%10;   
//      int minute_left = minute/10;                                
//      int minute_right = minute%10;                               
//      int second_left = second/10;                                
//      int second_right = second%10;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView_hour_left = (ImageView)findViewById(R.id.imageView_hour_left);
        imageView_hour_right = (ImageView)findViewById(R.id.imageView_hour_right);
        imageView_minute_left = (ImageView)findViewById(R.id.imageView_minute_left);
        imageView_minute_right = (ImageView)findViewById(R.id.imageView_minute_right);
        imageView_second_left= (ImageView)findViewById(R.id.imageView_second_left);
        imageView_second_right= (ImageView)findViewById(R.id.imageView_second_right);
/*  这些代码放在这个地方时错误的,因为这个时间是不断改变的,
 *   我们不断地从系统中获取时间,
 *这段代码需要不断循环,因此这段时间需要放在循环里面。这里是不断地切换图片的
 */
//        androidOsTime.setToNow(); 
//        imageView_hour_left.setImageResource(images[hour_left]);
//        imageView_hour_right.setImageResource(images[hour_right]);
//        imageView_minute_left.setImageResource(images[minute_left]);
//        imageView_minute_right.setImageResource(images[minute_right]);
//        imageView_second_left.setImageResource(images[second_left]);
//        imageView_second_right.setImageResource(images[second_right]);
/*这里就是一个循环,不断地执行获取时间,拆解数字,传递参数,显示图片的任                       
*务,只不过这里是用计时器来做这个重复的动作,如果使用for语句不会永远持续下去,
*因为中间的判断次数是有限的 
*/
    timer.schedule(new TimerTask()
    {
        @Override
        public void run()
        {
            handle.sendMessage(new Message());
        }
    }, 0,1000);
    }
}

以下时xml文件,即布局文件部分

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.timehhmmss.MainActivity" 
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    >

    <ImageView
        android:id="@+id/imageView_hour_left"
        android:layout_width="40dp"
        android:layout_height="60dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_launcher" />
    <ImageView
        android:id="@+id/imageView_hour_right"
        android:layout_width="40dp"
        android:layout_height="60dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="16dp"
        android:layout_toRightOf="@+id/imageView_hour_left"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView_minute_left"
        android:layout_width="40dp"
        android:layout_height="60dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="34dp"
        android:layout_toRightOf="@+id/imageView_colon1"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView_minute_right"
        android:layout_width="40dp"
        android:layout_height="60dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/imageView_minute_left"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView_second_left"
        android:layout_width="40dp"
        android:layout_height="60dp"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/imageView_second_right"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView_second_right"
        android:layout_width="40dp"
        android:layout_height="60dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView_colon1"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="39dp"
        android:layout_toRightOf="@+id/imageView_hour_right"
        android:src="@drawable/time_colon" />

    <ImageView
        android:id="@+id/imageView_colon2"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_centerVertical="true"
        android:layout_marginRight="73dp"
        android:layout_toLeftOf="@+id/imageView_second_left"
        android:src="@drawable/time_colon" />

RelativeLayout>

这里是最终效果图。
一个实时显示系统时钟的android应用_第1张图片

你可能感兴趣的:(android应用,java,android开发)