iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android如何自定义模拟时钟控件
  • 574
分享到

Android如何自定义模拟时钟控件

2023-06-26 05:06:43 574人浏览 八月长安
摘要

本文小编为大家详细介绍“Android如何自定义模拟时钟控件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android如何自定义模拟时钟控件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。自定义view&

本文小编为大家详细介绍“Android如何自定义模拟时钟控件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android如何自定义模拟时钟控件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

自定义view—透明模拟时钟显示

思路:重写view,1.根据控件的宽高进行获取模拟时钟的半径大小。2.重写onDraw方法,将画布进行不同角度的旋转进行绘制表盘 圆心 刻度 指针

这里就直接上代码了

自定义的TimeClockView:

package com.eq.viewdemo;import android.content.Context;import android.graphics.canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Handler;import android.os.Message;import android.text.TextPaint;import android.util.AttributeSet;import android.view.View;import java.util.Calendar;public class TimeClockView extends View {    private int width;    private int height;    private Paint mPaintLine;    private Paint mPaintCircle;    private Paint mPaintHour;    private Paint mPaintMinute;    private Paint mPaintSec;    private TextPaint mPaintText;    private Calendar mCalendar;    public static final int START_ONDRAW = 0X23;    //每隔一秒,在handler中调用一次重新绘制方法    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case START_ONDRAW:                    mCalendar = Calendar.getInstance();                    invalidate();//告诉UI主线程重新绘制                    handler.sendEmptyMessageDelayed(START_ONDRAW, 1000);                    break;                default:                    break;            }        }    };    public TimeClockView(Context context) {        super(context);    }    public TimeClockView(Context context, AttributeSet attrs) {        super(context, attrs);        mCalendar = Calendar.getInstance();        mPaintLine = new Paint();        mPaintLine.setColor(Color.GREEN);        mPaintLine.setStrokeWidth(2);        mPaintLine.setAntiAlias(true);//设置是否抗锯齿        mPaintLine.setStyle(Paint.Style.STROKE);//设置绘制风格        mPaintCircle = new Paint();        mPaintCircle.setColor(Color.RED);//设置颜色        mPaintCircle.setStrokeWidth(2);//设置线宽        mPaintCircle.setAntiAlias(true);//设置是否抗锯齿        mPaintCircle.setStyle(Paint.Style.FILL);//设置绘制风格        mPaintText = new TextPaint();        mPaintText.setColor(Color.BLUE);        mPaintText.setStrokeWidth(5);        mPaintText.setTextAlign(Paint.Align.CENTER);        mPaintText.setTextSize(30);        mPaintHour = new Paint();        mPaintHour.setStrokeWidth(6);        mPaintHour.setColor(Color.BLUE);        mPaintHour.setAntiAlias(true);        mPaintMinute = new Paint();        mPaintMinute.setStrokeWidth(4);        mPaintMinute.setColor(Color.BLUE);        mPaintMinute.setAntiAlias(true);        mPaintSec = new Paint();        mPaintSec.setStrokeWidth(2);        mPaintSec.setColor(Color.BLUE);        mPaintSec.setAntiAlias(true);        handler.sendEmptyMessage(START_ONDRAW);//向handler发送一个消息,让它开启重绘    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);        height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);        setMeasuredDimension(width, height);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        int circleRadius ; //模拟时钟的圆半径大小        if (width > height) {            circleRadius = height / 2 -10;        } else {            circleRadius = width / 2 -10;        }        //画出圆中心        canvas.drawCircle(width / 2, height / 2, 5, mPaintCircle);        //依次旋转画布,画出每个刻度和对应数字        for (int i = 1; i <= 60; i++) {            canvas.save();//保存当前画布            if (i % 5 == 0) {                //将画布进行以圆心以固定的角度旋转进行旋转                canvas.rotate(360 / 60 * i, width / 2, height / 2);                //设置字体大小,这里是以圆半径的十分之一大小                mPaintText.setTextSize(circleRadius / 10);                //如果绘制对应的数字时只进行一次旋转是不能达到目标的,需要再次以书写文字的地方在进行反向旋转这样写出来的就是正向的                canvas.rotate(-360 / 60 * i, width / 2, height / 2 - circleRadius+5);                canvas.drawText("" + i / 5, width / 2, height / 2 - circleRadius+circleRadius / 20 , mPaintText);            } else {                canvas.rotate(360 / 60 * i, width / 2, height / 2);                //左起:起始位置x坐标,起始位置y坐标,终止位置x坐标,终止位置y坐标,画笔(一个Paint对象)                canvas.drawCircle(width/2,height/2-circleRadius,2,mPaintCircle);            }            canvas.restore();        }        int minute = mCalendar.get(Calendar.MINUTE);//得到当前分钟数        int hour = mCalendar.get(Calendar.HOUR);//得到当前小时数        int sec = mCalendar.get(Calendar.SECOND);//得到当前秒数        String time;        if (sec < 10 && hour < 10 && minute < 10) { //都小于10            time = "0" + hour + ":0" + minute + ":0" + sec; //02:02:02        } else if (sec < 10 && hour < 10 && minute > 9) {//分钟大于9            time = "0" + hour + ":" + minute + ":0" + sec; //02:12:02        } else if (sec > 9 && hour < 10 && minute < 10) {//秒大于9            time = "0" + hour + ":0" + minute + ":" + sec; //02:02:12        } else if (sec < 10 && hour > 9 && minute < 10) {//时大于9            time = hour + ":0" + minute + ":0" + sec; //12:02:02        } else if (sec < 10 && hour > 9 && minute > 9) {//时分于9            time = hour + ":" + minute + ":0" + sec; //12:12:02        } else if (sec > 9 && hour > 9 && minute < 10) {//时秒大于9            time = hour + ":0" + minute + ":" + sec; //12:02:12        } else if (sec > 9 && hour < 10 && minute > 9) {//分秒大于9            time = "0" + hour + ":" + minute + ":" + sec; //02:12:12        } else {            time = hour + ":" + minute + ":" + sec; //12:12:12        }        //绘制中心下方的时间显示        mPaintText.setTextSize(circleRadius / 10 * 2);        canvas.save();        canvas.drawText(time, width / 2, height / 2 + circleRadius / 10 * 4, mPaintText);        //绘制时分秒相应的指针        float minuteDegree = minute / 60f * 360;//得到分针旋转的角度        canvas.save();        canvas.rotate(minuteDegree, width / 2, height / 2);        canvas.drawLine(width / 2, height / 2 - circleRadius + circleRadius / 3, width / 2, height / 2 + circleRadius / 6, mPaintMinute);        canvas.restore();        float hourDegree = (hour * 60 + minute) / 12f / 60 * 360;//得到时钟旋转的角度        canvas.save();        canvas.rotate(hourDegree, width / 2, height / 2);        canvas.drawLine(width / 2, height / 2 - circleRadius + circleRadius / 2, width / 2, height / 2 + circleRadius / 9, mPaintHour);        canvas.restore();        float secDegree = sec / 60f * 360;//得到秒针旋转的角度        canvas.save();        canvas.rotate(secDegree, width / 2, height / 2);        canvas.drawLine(width / 2, height / 2 - circleRadius + 2, width / 2, height / 2 + circleRadius / 4, mPaintSec);        canvas.restore();    }}

在布局中进行调用

activity_main.xml :

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="Http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.eq.viewdemo.MainActivity">   <com.eq.viewdemo.TimeClockView       android:layout_width="match_parent"       android:layout_height="match_parent"       android:background="#f99"/></RelativeLayout>

读到这里,这篇“Android如何自定义模拟时钟控件”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Android如何自定义模拟时钟控件

本文链接: https://www.lsjlt.com/news/306979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android如何自定义模拟时钟控件
    本文小编为大家详细介绍“Android如何自定义模拟时钟控件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android如何自定义模拟时钟控件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。自定义view&...
    99+
    2023-06-26
  • Android自定义模拟时钟控件
    本文实例为大家分享了Android自定义模拟时钟控件的具体代码,供大家参考,具体内容如下 自定义view—透明模拟时钟显示 项目中要用到模拟时钟的显示,查了一些资料根据自...
    99+
    2024-04-02
  • Android控件之TextClock & AnalogClock(模拟时钟)
    TextClock是一个用于显示时间的Android控件,它能够根据系统当前的时间自动更新显示内容。可以通过设置format属性来控...
    99+
    2023-09-16
    android
  • Android控件 之 TextClock & AnalogClock(模拟时钟)
    TextClock和AnalogClock是Android中的两个控件,用于显示时间。1. TextClock控件:TextCloc...
    99+
    2023-09-17
    android
  • android如何自定义简单时钟
    这篇文章主要介绍android如何自定义简单时钟,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!android实现简单时钟的具体代码:attrs定义如下<xml version="1.0&qu...
    99+
    2023-06-06
  • Android自定义定时闹钟开发
    本文实例为大家分享了Android开发之自定义闹钟实现,供大家参考,具体内容如下 闹钟时间设置及显示 闹钟的布局很简单,就是一个简单时间设置,所以自己写一个简单的布局按钮之类的也可以...
    99+
    2024-04-02
  • Android如何自定义评分控件
    今天小编给大家分享一下Android如何自定义评分控件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。自定义参数为了方便扩展,...
    99+
    2023-06-30
  • Android自定义控件实现时间轴
    本文实例为大家分享了Android自定义控件实现时间轴的具体代码,供大家参考,具体内容如下 由于项目中有需求,就简单的封装一个,先记录一下,有时间上传到github。 1、先增加自定...
    99+
    2024-04-02
  • android自定义控件如何实现简易时间轴
    这篇“android自定义控件如何实现简易时间轴”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“android自定义控件如何实现简易时间轴”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过...
    99+
    2023-06-28
  • Android如何实现一个倒计时自定义控件
    这篇“Android如何实现一个倒计时自定义控件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android如何实现一个倒计...
    99+
    2023-06-29
  • Android如何自定义View歌词控件
    本篇内容介绍了“Android如何自定义View歌词控件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言一、 歌词解析歌词实体类Lrc...
    99+
    2023-06-20
  • Android自定义View实现时钟功能
    最近在练习自定义view, 想起之前面试的时候笔试有道题是写出自定义一个时钟的关键代码. 今天就来实现一下. 步骤依然是先分析, 再上代码. 实现效果 View分析 时钟主要分为五...
    99+
    2024-04-02
  • Android自定义View实现时钟效果
    本文实例为大家分享了Android自定义View实现时钟效果的具体代码,供大家参考,具体内容如下 自定义时钟 初学自定义View,先画一个不太成熟的时钟(甚至只有秒针) 时钟效果 ...
    99+
    2024-04-02
  • Android如何自定义实现日历控件
    这篇文章主要介绍Android如何自定义实现日历控件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下1. Calendar类2. 布局创建calendar_layout.xml<LinearLayou...
    99+
    2023-06-25
  • Android自定义控件如何在XML文件中使用自定义属性
    目录前言一、为什么需要自定义控件二、具体步骤1.首先我们创建一个 layout xml文件:2.为自定义控件创建java类:3.在res/values下,新建一个attrs.xml文...
    99+
    2023-05-14
    Android XML自定义属性 Android 自定义控件
  • Android实现一个倒计时自定义控件
    目录(一)前言(二)效果展示(三)实现思路(三)代码地址总结(一)前言 Android 其实提供了一个倒计时控件叫做CountDownTimer,这个倒计时控件用起来也很简单,但是要...
    99+
    2024-04-02
  • Android如何自定义Switch开关按钮控件
    这篇“Android如何自定义Switch开关按钮控件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android如何自定义...
    99+
    2023-07-02
  • android 自定义控件 使用declare
    在Android中,可以使用`declare-styleable`来定义和使用自定义控件的属性。下面是一个简单的示例:1. 在res...
    99+
    2023-09-21
    Android
  • winform如何自定义控件
    在WinForms中自定义控件通常涉及以下步骤: 创建自定义控件类:创建一个继承自现有控件(如Control或Panel)的新类...
    99+
    2024-04-09
    winform
  • Android开发怎么自定义实时图表控件
    本文小编为大家详细介绍“Android开发怎么自定义实时图表控件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android开发怎么自定义实时图表控件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。演示环境开发工...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作