Android多功能时钟开发案例(基础篇)

本文我们进入Android多功能时钟开发实战学习,具体的效果可以参考手机上的时钟,内容如下
首先我们来看一看布局文件layout_main.xml

整个布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/container"
 android:layout_width="match_parent"
 android:layout_height="match_parent" > 

 <TabHost
  android:id="@android:id/tabhost"
  android:layout_width="match_parent"
  android:layout_height="match_parent" > 

  <LinearLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" > 

   <TabWidget
    android:id="@android:id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
   </TabWidget> 

   <FrameLayout
    android:id="@android:id/tabcontent"
    android:layout_width="match_parent"
    android:layout_height="match_parent" > 

    <com.example.clock.TimeView
     android:id="@+id/tabTime"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >
    </com.example.clock.TimeView> 

    <com.example.clock.AlarmView
     android:id="@+id/tabAlarm"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >
<span style="white-space:pre">  </span>……
    </com.example.clock.AlarmView> 

    <com.example.clock.TimerView
     android:id="@+id/tabTimer"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >
<span style="white-space:pre">  </span>……
    </com.example.clock.TimerView> 

    <com.example.clock.StopWatchView
     android:id="@+id/tabStopWatch"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >
<span style="white-space:pre">  </span>……
    </com.example.clock.StopWatchView>
   </FrameLayout>
  </LinearLayout>
 </TabHost> 

</FrameLayout> 

整个布局整的是一个FrameLayout,我们在里面放了一个TabHost,接下来我们就可以在里面直接添加自己想要的布局了,可能初学者初一看会有那么一个疑问,就是<com.example.clock.……></com.example.clock.……>这个是什么东西??这是一个自定义的控件,我们创建的一个继承了LinearLayout的一个类(讲解可以参考这里http://www.jb51.net/article/85515.htm),上面我们看到了四个这样的标签,表示我们有四个这样的Tab页面。关于布局的东西这里就不多讲了,之后会把我自己在学习过程中的一些不懂,以及相关的知识点上传到资源中,大家可以下载来看看。

完整的布局文件代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/container"
 android:layout_width="match_parent"
 android:layout_height="match_parent" > 

 <TabHost
  android:id="@android:id/tabhost"
  android:layout_width="match_parent"
  android:layout_height="match_parent" > 

  <LinearLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" > 

   <TabWidget
    android:id="@android:id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
   </TabWidget> 

   <FrameLayout
    android:id="@android:id/tabcontent"
    android:layout_width="match_parent"
    android:layout_height="match_parent" > 

    <com.example.clock.TimeView
     android:id="@+id/tabTime"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" > 

     <TextView
      android:id="@+id/tvTime"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:gravity="center"
      android:textAppearance="?android:attr/textAppearanceLarge" />
    </com.example.clock.TimeView> 

    <com.example.clock.AlarmView
     android:id="@+id/tabAlarm"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" > 

     <ListView
      android:id="@+id/lvListAlarm"
      android:layout_width="fill_parent"
      android:layout_height="0dp"
      android:layout_weight="1" >
     </ListView> 

     <Button
      android:id="@+id/btnAddAlarm"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/add_alarm" >
     </Button>
    </com.example.clock.AlarmView> 

    <com.example.clock.TimerView
     android:id="@+id/tabTimer"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" > 

     <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="0dp"
      android:layout_weight="1"
      android:orientation="horizontal" > 

      <EditText
       android:id="@+id/etHour"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:inputType="number"
       android:singleLine="true"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text=":"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <EditText
       android:id="@+id/etMin"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:inputType="number"
       android:singleLine="true"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text=":"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <EditText
       android:id="@+id/etSec"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:inputType="number"
       android:singleLine="true"
       android:textAppearance="?android:attr/textAppearanceLarge" />
     </LinearLayout> 

     <LinearLayout
      android:id="@+id/btnGroup"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal" > 

      <Button
       android:id="@+id/btnStart"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/start" /> 

      <Button
       android:id="@+id/btnPause"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/pause" /> 

      <Button
       android:id="@+id/btnResume"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/resume" /> 

      <Button
       android:id="@+id/btnReset"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/reset" />
     </LinearLayout>
    </com.example.clock.TimerView> 

    <com.example.clock.StopWatchView
     android:id="@+id/tabStopWatch"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" > 

     <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal" > 

      <TextView
       android:id="@+id/timeHour"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text=":"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <TextView
       android:id="@+id/timeMin"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text=":"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <TextView
       android:id="@+id/timeSec"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="."
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

      <TextView
       android:id="@+id/timeMsec"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:textAppearance="?android:attr/textAppearanceLarge" />
     </LinearLayout> 

     <ListView
      android:id="@+id/lvWatchTime"
      android:layout_width="fill_parent"
      android:layout_height="0dp"
      android:layout_weight="1" >
     </ListView> 

     <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal" > 

      <Button
       android:id="@+id/btnSWStart"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/start" /> 

      <Button
       android:id="@+id/btnSWPause"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/pause" /> 

      <Button
       android:id="@+id/btnSWResume"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/resume" /> 

      <Button
       android:id="@+id/btnSWLap"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/lap" /> 

      <Button
       android:id="@+id/btnSWReset"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="@string/reset" />
     </LinearLayout>
    </com.example.clock.StopWatchView>
   </FrameLayout>
  </LinearLayout>
 </TabHost> 

</FrameLayout> 

讲完了布局,我们来讲讲MainActivity

private TabHost tabHost; 

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main); 

 tabHost = (TabHost) findViewById(android.R.id.tabhost);
 tabHost.setup(); 

 // 为TabHost添加标签
 // 新建一个newTabSpec(newTabSpec)用来指定该标签的id(就是用来区分标签)的
 // 设置其标签和图表(setIndicator)
 // 设置内容(setContent)
 /*
  * 设置选项卡 : -- 设置按钮名称 : setIndicator(时钟); -- 设置选项卡内容 : setContent(),
  * 可以设置视图组件, 可以设置Activity, 也可以设置Fragement;
  */
 tabHost.addTab(tabHost.newTabSpec("tabTime").setIndicator("时钟")
   .setContent(R.id.tabTime));
 tabHost.addTab(tabHost.newTabSpec("tabAlarm").setIndicator("闹钟")
   .setContent(R.id.tabAlarm));
 tabHost.addTab(tabHost.newTabSpec("tabTimer").setIndicator("计时器")
   .setContent(R.id.tabTimer));
 tabHost.addTab(tabHost.newTabSpec("tabStopWatch").setIndicator("秒表")
   .setContent(R.id.tabStopWatch));
}

在MainActivity中主要的操作就是设置TabHost,上面的代码中已经贴上了解释,这里就不讲了,接下来一篇我们就重点来讲讲时钟、闹钟、计时器和秒表这四部分,希望大家继续学习。

以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。

(0)

相关推荐

  • Android画个时钟玩玩

    先看下最终的效果 开始实现 新建一个ClockView集成View public class ClockView extends View { } 先重写onMeasure方法,这里要先说一下View的测量模式,一共有三种: 1.EXACTLY 即精确值模式,当我们将控件的layout_width属性或layout_height属性指定为具体数值时,比如android:layout_width="100dp",或者指定为math_parent属性时(占据父View的大小),系统使用的是

  • Android多功能时钟开发案例(实战篇)

    上一篇为大家介绍的是Android多功能时钟开发基础内容,大家可以回顾一下,Android多功能时钟开发案例(基础篇) 接下来进入实战,快点来学习吧. 一.时钟 在布局文件中我们看到,界面上只有一个TextView,这个TextView的作用就是显示一个系统的当前时间,同时这个时间还是一秒一秒跳的,要实现一秒一秒的跳就需要我们每隔一秒就要刷新一下,同时我们这里还考虑了切换到另一个Tab的时候,这个时间就不跳动了,这样就会减少这个对系统的占用,考虑到了这点我们在这里用到了Handler,通过han

  • android实现widget时钟示例分享

    一.在 AndroidManifest.xml文件中配置Widgets: 复制代码 代码如下: <manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.widget"    android:versionCode="1"    android:versionName="1.0" >   

  • Android 仿日历翻页、仿htc时钟翻页、数字翻页切换效果

    废话不多说,效果图: 自定义控件找自网络,使用相对简单,具体还没有来得及深入研究,只是先用笨方法大概实现了想要的效果,后续有空会仔细研究再更新文章, 本demo切换方法是用的笨方法,也就是由新数字和旧数字相比较来切换数字变换的,大致使用方法如下: //获取输入框中的数字 int newNumber = Integer.parseInt(etInput.getText().toString()); //获取个.十.百位数字 int nbai = newNumber / 100; int nshi

  • Android实现简单时钟View的方法

    通过Canvas的平移与旋转简化绘图逻辑是一个非常有用的技巧,下面的时钟view就是利用这个方法完成的,省去了使用三角函数计算坐标的麻烦. package com.example.swt369.simpleclock; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.Nullable; i

  • Android ActionBar制作时钟实例解析

    本文实例为大家分享了Android ActionBar制作时钟的具体代码,供大家参考,具体内容如下 1. MainActivity.java   package com.example.days19actionbar07custom; import com.example.days19actionbar07custom.R; import android.app.Activity; import android.os.Bundle; import android.view.Menu; impor

  • Android仿小米时钟效果

    我在一个[博客] android高仿小米时钟(使用Camera和Matrix实现3D效果)上面看到了小米时钟实现.特别感兴趣.就认真的看了一遍.并自己敲了一遍.下面说下我自己的理解和我的一些改进的地方效果真的特别棒就发布了自己的时钟应用. 先上图(电脑没有gif截图软件.大家凑合看.哪个软件好也可以给我推荐下) 话不多说,首先自定义控件XimiClockView继承view  并做一些初始化的操作 看到的漂亮时钟图片我自己画的效果图(以后妈妈再也不用担心我迟到了) public XimiCloc

  • Android通过Path实现搜索按钮和时钟复杂效果

    在Android中复杂的图形的绘制绝大多数是通过path来实现,比如绘制一条曲线,然后让一个物体随着这个曲线运动,比如搜索按钮,比如一个简单时钟的实现: 那么什么是path呢! 定义:path  就是路径,就是图形的路径的集合,它里边包含了路径里边的坐标点,等等的属性.我们可以获取到任意点的坐标,正切值. 那么要获取Path上边所有点的坐标还需要用到一个类,PathMeasure; PathMesure: PathMeasure是一个用来测量Path的类,主要有以下方法: 构造方法 公共方法 可

  • Android获取设备CPU核数、时钟频率以及内存大小的方法

    本文实例讲述了Android获取设备CPU核数.时钟频率以及内存大小的方法.分享给大家供大家参考,具体如下: 因项目需要,分析了一下 Facebook 的开源项目 - Device Year Class. Device Year Class 的主要功能是根据 CPU核数.时钟频率 以及 内存大小 对设备进行分级.代码很简单,只包含两个类: DeviceInfo -> 获取设备参数, YearClass -> 根据参数进行分级. 下表是 Facebook 公司提供的分级标准,其中 Year 栏表

  • android高仿小米时钟(使用Camera和Matrix实现3D效果)

    继续练习自定义View..毕竟熟才能生巧.一直觉得小米的时钟很精美,那这次就搞它~这次除了练习自定义View,还涉及到使用Camera和Matrix实现3D效果. 一个这样的效果,在绘制的时候最好选择一个方向一步一步的绘制,这里我选择由外到内.由深到浅的方向来绘制,代码步骤如下: 1.首先老一套~新建attrs.xml文件,编写自定义属性如时钟背景色.亮色(用于分针.秒针.渐变终止色).暗色(圆弧.刻度线.时针.渐变起始色),新建MiClockView继承View,重写构造方法,获取自定义属性值

随机推荐