经常使用的自己定义UI组件- 一:TimeView

经常使用的自己定义UI组件- 一:TimeView

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。



近期做蛋疼的机顶盒项目,以后遇到哪些经常使用的组件,记录于此。

反编译 youku视频TV偷来的。。也希望各位童鞋多学习别人的代码,为己所用。

当然还有其它的办法,比方监听系统发出的广播等等。等有时间再把那个贴上来。

效果图:右上角的时间

//img-blog.csdn.net/20140630144648750?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVlaHUxOTg3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

TimeView.java

package com.youku.tv.widget;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.Calendar;
import java.util.Date;

public class TimeView extends LinearLayout{
    class ClockHandler extends Handler {

        private void post()
        {
            sendMessageDelayed(obtainMessage(0), 1000 * (60 – Calendar.getInstance().get(13)));
        }

        public void handleMessage(Message message){
            super.handleMessage(message);
            if(!mStopped){
                updateClock();
                post();
            }
        }

        public void startScheduleUpdate(){
            mStopped = false;
            post();
        }

        public void stopScheduleUpdate(){
            mStopped = true;
            removeMessages(0);
        }

        private boolean mStopped;
        final TimeView this$0;

        ClockHandler(){
            super();
            this$0 = TimeView.this;
        }
    }

    public TimeView(Context context, AttributeSet attributeset){
        super(context, attributeset);
        mContext = getContext();
        ((LayoutInflater)context.getSystemService(“layout_inflater”)).inflate(R.layout.time_simple, this);
        mHour = (TextView)findViewById(R.id.system_hour);
        mMinute = (TextView)findViewById(R.id.system_minute);
        mClockUpdater = new ClockHandler();
    }

    protected void onAttachedToWindow(){
        super.onAttachedToWindow();
        updateClock();
        mClockUpdater.startScheduleUpdate();
    }

    protected void onDetachedFromWindow(){
        super.onDetachedFromWindow();
        mClockUpdater.stopScheduleUpdate();
    }

    protected void onVisibilityChanged(View view, int i)
    {
        super.onVisibilityChanged(view, i);
    }

    void updateClock()
    {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        int k = calendar.get(5);
        int l = calendar.get(11);
        int i1 = calendar.get(12);
        if(mHour != null)
        {
            TextView textview2 = mHour;
            Object aobj2[] = new Object[1];
            aobj2[0] = Integer.valueOf(l);
            textview2.setText(String.format(“%2d:”, aobj2));
        }
        if(mMinute != null)
            if(i1 < 10)
            {
                TextView textview1 = mMinute;
                Object aobj1[] = new Object[1];
                aobj1[0] = Integer.valueOf(i1);
                textview1.setText(String.format(“0%d”, aobj1));
            } else
            {
                TextView textview = mMinute;
                Object aobj[] = new Object[1];
                aobj[0] = Integer.valueOf(i1);
                textview.setText(String.format(“%2d”, aobj));
            }
        invalidate();
    }

    private static final String TAG = “TimeView”;
    private ClockHandler mClockUpdater;
    private Context mContext;
    private TextView mHour;
    private TextView mMinute;

}

time_simple.xml布局文件

<?xml version=”1.0″ encoding=”utf-8″?>
<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content” >

    <TextView
        android:id=”@id/system_minute”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_alignParentRight=”true”
        android:text=”01″
        android:textColor=”@color/timecolor”
        android:textSize=”@dimen/px42″ />

    <TextView
        android:id=”@id/system_hour”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_toLeftOf=”@id/system_minute”
        android:text=”55″
        android:textColor=”@color/timecolor”
        android:textSize=”@dimen/px42″ />

</RelativeLayout>


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118809.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Linux如何添加路由_linux添加永久路由命令

    Linux如何添加路由_linux添加永久路由命令Linux如何添加路由a.如何使用命令给Linux添加一个默认网关?缺省网关路由:默认网关就是数据包不匹配任何的路由规则,最后流经的地址关口!网关按字面意思就是网络的关口,就相当于我们办公室的大门一样,大家上班就要经过办公室的门一样。使用route-n查看网关信息,或者netstat-rn查看路由[root@machine1~]#route-nKernel

  • task scheduler什么意思_task scheduler异常

    task scheduler什么意思_task scheduler异常一直在网站上无偿使用大家提供的各种解决方案,实在是不好意思了,今天终于也开通博客,一方面记录下遇到的各种问题及解决方案,一方面给其他需要的朋友做个参考。使用TaskScheduler的时候,调整‘Runwhetheruserloggedonornot’的时候,遇到下面的报错,“”

    2022年10月11日
  • CreateThread()与_beginthread()的区别详细解析

    很多开发者不清楚这两者之间的关系,他们随意选一个函数来用,发现也没有什么大问题,于是就忙于解决更为紧迫的任务去了。等到有一天忽然发现一个程序运行时间很长的时候会有细微的内存泄露,开发者绝对不会想到是因为这两套函数用混的结果我们知道在Windows下创建一个线程的方法有两种,一种就是调用WindowsAPICreateThread()来创建线程;另外一种就是调用MSVC…

  • ArrayList扩容原理

    ArrayList扩容原理ArrayList扩容原理今天带来的下饭菜是ArrayList的扩容源码解读。相信大家对这盘菜都不陌生,我们经常使用它来定义一个集合,无论日常开发还是自己学习使用的频率是相当的高。而且大家也都一定知道ArrayList集合是通过数组实现的,但是在声明一组数据的时候都会选择ArrayList而不是数组,原因就是由于这组数据的元素的数量不确定,如果使用数组的话,我们还得亲自维护数组的长度,这时你一定会说TMD烦死了;但如果使用了ArrayList,维护数组长度的事情就不用我们操心了,我们只需要对这组数据进

  • sklearn cross validation_python sklearn

    sklearn cross validation_python sklearnKFold通过提供index来给你确定不同组的训练集以及测试的index,来构造交叉验证数据集。参数(n,n_folds=3,shuffle=False,random_state=None)n为总数n_folds为分为多少个交叉验证集shuffle为是否随机random_state设置随机因子fromsklearn.cross_validationimportKFoldimpor

  • 数据挖掘项目的生命周期是指_数据挖掘生命周期的数据准备阶段

    数据挖掘项目的生命周期是指_数据挖掘生命周期的数据准备阶段 第一步:数据收集; 第二步:数据清理和转换;          目前有很多技术能用于数据清理和转换:           1、数据类型转换;          2、连续列转换;          3、分组;          4、聚集;          5、缺失值处理;          6、删除孤立点; 第三步:模型构建 

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号