android TimePicker 浅析

android TimePicker浅析

TimePicker是什么

TimperPicker是一个继承自FrameLayout的系统控件。这个控件是所谓的“组合控件”

什么是所谓的“组合控件”:个人理解就是,把一些(一些肯定多于一个)原有控件进行封装。一般是通过布局文件把一些原有控件按照规则摆放好,然后封装成一个大的控件。

所有TimerPicker里面没有重写onMeasure,onLayout,onDraw()这些View绘制相关的方法;也没有重写onInterceptTouchEvent(),onTouchEvent()这样的交互方法。

不过TimePicker里面用到了一个概念叫Delegate,翻译过来似乎是“代理”的意思。不清楚这是不是传说中的代理模式。不过这个和Java中的动态代理不是一个概念。

动态代理肯定要用到:java.lang.reflect.Proxy了。

这里的Delegate是很有意思的,会根据调用者设置的TimePickerandroid:timePickerMode="clock"或者android:timePickerMode="spinner"来加载不同的布局。

这里的spinner模式,是对NumberPicker的组合封装。可以看一下大致的布局。

想看一下 spinner模式下的效果图:可以看一下这个链接

spinner模式的布局文件
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2011, The Android Open Source Project
*/
-->

<!-- Layout of time picker -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/timePickerLayout"
    android:orientation="horizontal"
    android:layout_gravity="center_horizontal"
    >

    <LinearLayout android:orientation="horizontal"

        android:layoutDirection="ltr">

        <!-- hour -->
        <NumberPicker
            android:id="@+id/hour"
        />

        <!-- divider -->
        <TextView
            android:id="@+id/divider"
        />

        <!-- minute -->
        <NumberPicker
            android:id="@+id/minute"
         />

    </LinearLayout>

    <!-- AM / PM -->
    <NumberPicker
        android:id="@+id/amPm"
    />

</LinearLayout>

<!-- 只保留了 id , 其他属性删除了 -->

看到这个布局也就明白了 , TimerPicker就是用3个NumberPicker横向排列对齐起来的。然后再TimerPicker的代码里面,主要就是处理时间设置去获取的。

由于TimePicker代码里面全部是对时间的处理与回调,跟View本身没有什么关联,这里就不分析了。


关于clock模式,还没有去看…..

clock模式下,用到了一个类:RadialTimePickerView。是直接继承自View的,这个类比较复杂…(计算复杂)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值