使用Drawable实时画时钟
来源:互联网 发布:mac mini拆机 编辑:程序博客网 时间:2024/06/05 14:56
近来在学习drawable的使用,写了一个根据传入的date绘图的drawable。主要绘图动作是在 draw()函数,结合Canvas ,Paint的基本使用来完成绘制。
public class MainActivity extends ActionBarActivity { private final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.iv_test); imageView.setImageDrawable(new ClockDrawable(new Date(), Color.BLACK, 50f)); } class ClockDrawable extends Drawable { private float hour, min, radius, hourLen, minLen; private int color; private int margin = 3; ClockDrawable(Date d, int c, float r) { SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm"); String time = dateFormat.format(d); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(d); hour = calendar.get(Calendar.HOUR_OF_DAY); min = calendar.get(Calendar.MINUTE); System.out.println(hour + ":" + min); color = c; radius = r; minLen = r * (8f / 10f); hourLen = r * (6f / 10f); } @Override public void draw(Canvas canvas) { canvas.translate(radius + margin, radius + margin); Paint paint = new Paint(); paint.setColor(color); paint.setAntiAlias(true); paint.setStyle(Paint.Style.STROKE); double hourAgl = Math.toRadians(360 * ((hour + min / 60) / 12f));// canvas.drawLine(0, 0, (float) (hourLen * Math.sin(hourAgl)), -(float) (hourLen * Math.cos(hourAgl)), paint); double minAgl = Math.toRadians(360 * (min / 60f)); canvas.drawLine(0, 0, (float) (minLen * Math.sin(minAgl)), -(float) (minLen * Math.cos(minAgl)), paint); canvas.drawCircle(0, 0, radius, paint); } @Override public int getIntrinsicWidth() { return (int) (radius + margin) * 2; } @Override public int getIntrinsicHeight() { return (int) (radius + margin) * 2; } @Override public void setAlpha(int alpha) { } @Override public void setColorFilter(ColorFilter cf) { } @Override public int getOpacity() { return 0; } }}
layout里就只有Imageview,就不贴出来了,绘制的效果图是这样的:
0 0
- 使用Drawable实时画时钟
- 实时时钟 -- “RTC”的使用
- 关于实时时钟模块DS1302使用心得
- 单片机系统时钟与实时时钟有什么区别?为什么有的系统时钟晶振使用12M,而实时时钟使用32.768K
- 使用F2812调试DS1302实时时钟芯片经验
- 实时时钟DS1302与超级电容器/法拉电容 配合使用
- 树莓派使用上RTC实时时钟(DS3231,I2C接口)
- HT1380实时时钟驱动程序
- 实时时钟RTC实验
- 2410实时时钟驱动
- s3c2440实时时钟中断
- isl1208实时时钟简介
- 实时小时钟
- mini2440 实时时钟实验
- S3C2440 实时时钟RTC
- 实时时钟RTC
- LPC1768 -- RTC实时时钟
- 实时时钟RTC
- C#中的泛型介绍和理解
- Python 之 LIBSVM 使用小结(三)
- 用CountDownTimer实现获取手机验证码效果
- 反馈神经网络Hopfield网络
- 转换字符串格式为原来的字符+该字符连续出现的个数
- 使用Drawable实时画时钟
- 欢迎使用CSDN-markdown编辑器
- 使用Maven来管理项目(一) Maven的安装与配置
- mysql 高可用8
- 《将51CTO博客搬至CSDN》
- MyBatis -- 对表进行增删改查(基于XML的实现)
- @font-face的format属性
- bzoj 1036 [LCT version]
- nginx事件模块指令