Android 画指南针
1.无意看到了一个指南针的UI,在这里简单的模仿了一下。其实就是第画布的一些变化而已。
别人的效果图是:
3.简单说一下思路:
1)首先是画一个黑色圆盘
2) 然后画圆盘上的刻度(就是对Canvas一些变换)
3) 文字添加
4.直接上代码:
1 public class CompassView extends View { 2 private Paint circlePaint, tickPaint; 3 private TextPaint textPaint; 4 // 指定控件宽和高,用于自适应 5 private float vWidth, vHeight; 6 // 圆盘的半径 7 private float compassRadiu; 8 // 刻度线段的长度 9 private float tickHeight; 10 // 字体高度和宽度 11 private float textHeight, textWidth;; 12 13 public CompassView(Context context) { 14 super(context); 15 initPaint(context); 16 } 17 18 public CompassView(Context context, AttributeSet attrs) { 19 super(context, attrs); 20 initPaint(context); 21 } 22 23 private void initPaint(Context context) { 24 // 对画圆盘画初始化 25 circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); 26 circlePaint.setColor(Color.BLACK); 27 circlePaint.setStyle(Paint.Style.FILL); 28 29 // 对刻度画笔进行初始化 30 tickPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 31 tickPaint.setColor(Color.RED); 32 tickPaint.setStrokeWidth(3); 33 34 // 对字的画笔进行初始化 35 textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); 36 textPaint.setColor(Color.WHITE); 37 textPaint.setTextSize(20); 38 39 } 40 41 // 自适应在这里做的 42 @Override 43 protected void onSizeChanged(int w, int h, int oldw, int oldh) { 44 // 获取控件的宽和高 45 vWidth = w; 46 vHeight = h; 47 compassRadiu = Math.min(w, h) / 2; 48 tickHeight = (1 / 12F) * compassRadiu; 49 textHeight = textPaint.descent() - textPaint.ascent(); 50 51 } 52 53 @Override 54 protected void onDraw(Canvas canvas) { 55 canvas.drawColor(Color.CYAN); 56 // 黑色圆盘 57 canvas.drawCircle(compassRadiu, compassRadiu, compassRadiu, circlePaint); 58 // 画红色的刻度 59 int degress; 60 float textWidth; 61 62 for (int i = 0; i < 24; i++) { 63 canvas.save(); 64 canvas.translate(compassRadiu, compassRadiu); 65 // 当前canvas旋转角度 66 degress = i * 15; 67 canvas.rotate(15 * i); 68 69 canvas.drawLine(0, -compassRadiu, 0, -compassRadiu + tickHeight, 70 tickPaint); 71 switch (degress) { 72 case 0: 73 textWidth = textPaint.measureText("45"); 74 drawText(canvas, "45", textWidth); 75 break; 76 77 case 45: 78 textWidth = textPaint.measureText("东"); 79 drawText(canvas, "东", textWidth); 80 break; 81 case 90: 82 textWidth = textPaint.measureText("135"); 83 drawText(canvas, "135", textWidth); 84 break; 85 case 135: 86 textWidth = textPaint.measureText("南"); 87 drawText(canvas, "南", textWidth); 88 break; 89 case 180: 90 textWidth = textPaint.measureText("225"); 91 drawText(canvas, "225", textWidth); 92 break; 93 case 225: 94 textWidth = textPaint.measureText("西"); 95 drawText(canvas, "西", textWidth); 96 break; 97 case 270: 98 textWidth = textPaint.measureText("315"); 99 drawText(canvas, "315", textWidth); 100 break; 101 case 315: 102 textWidth = textPaint.measureText("北"); 103 drawText(canvas, "北", textWidth); 104 canvas.drawLine(0, 105 -compassRadiu + tickHeight + textHeight + 10, 106 -textWidth / 3, -compassRadiu + tickHeight + textHeight 107 + 30, tickPaint); 108 canvas.drawLine(0, 109 -compassRadiu + tickHeight + textHeight + 10, 110 textWidth / 3, -compassRadiu + tickHeight + textHeight 111 + 30, tickPaint); 112 113 break; 114 default: 115 break; 116 } 117 canvas.restore(); 118 } 119 120 } 121 122 private void drawText(Canvas canvas, String text, float textWidth) { 123 124 canvas.drawText(text, -(textWidth / 2), -compassRadiu + tickHeight 125 + textHeight, textPaint); 126 127 } 128 }
运行后的效果图是:
源码下载
转载于:https://www.cnblogs.com/liangstudyhome/p/4389537.html
Android 画指南针相关推荐
- Android 实现指南针效果
Android 实现指南针效果 前一段时间在做指南针,于是想偷偷懒.在网上直接找一个Demo.然后改改旧差不多了.可是看到的效果却和预期的差太多了,所以就不得不自己撸一个: 大致上会用到内容 自定义V ...
- Android中指南针的实现
其实这篇博客不是做真正的指南针,因为真正的指南针需要做一个完整的自定义控件来指示方向.我们这里只是简单通过代码获取用户手机头部指向的方向.这个功能往往在我们定位获取的时候,用户方向变更后进行采集.车辆 ...
- Android学习-指南针(方向传感器)
Android学习-指南针 效果图(背景图片网上随便找的): 1.编写布局文件activity_main.xml文件 主要放一个东南西北方向图片,一个指针图片用来指明方向 <?xml versi ...
- [转载]android 画虚线、实线,画圆角矩形,一半圆角
[转载]android 画虚线.实线,画圆角矩形,一半圆角 (2013-03-19 12:38:12) 转载▼ 标签: 转载 分类: android 原文地址:android 画虚线.实线,画圆角矩形 ...
- Android 画一个 iPhone 样式的小时钟
Android 画一个 iPhone 样式的小时钟 起因 iPhone主界面的时钟几乎每天都会看到,某天突发奇想,用Android是否也可以画一个类似的呢?于是决定也尝试着画一个,顺便巩固下自绘控件的 ...
- Android之指南针(电子罗盘)学习
点我下载源码 5月12日更新到V5版:http://download.csdn.net/detail/weidi1989/5364243 今天,在小米的开源项目中下载了一个指南针源码学习了一下,感觉不 ...
- Android之指南针学习
5月12日更新到V5版:http://download.csdn.net/detail/weidi1989/5364243 今天,在小米的开源项目中下载了一个指南针源码学习了一下,感觉不仅界面做得很漂 ...
- Android之指南针
点我下载源码 今天,在小米的开源项目中下载了一个指南针源码学习了一下,感觉不仅界面做得很漂亮,代码也是很精致,所以我在研究了之后,加了比较多的注释,果断跟大家分享一下,很精简的几段代码,仔细品味可以学 ...
- Android 画虚线 DashPathEffect 使用详解
代码 package com.example.view;import android.content.Context; import android.graphics.Canvas; import a ...
- android画一个圆形图片组件
imageview 显示圆形图片如下图. 圆形头像原理. 1.根据图片创建一个大小相同的画布. 2.在画布上画一个圆形. 3.画一个绘制交集,显示上层. // 将圆形图片,返回Bitmappublic ...
最新文章
- 云知声CEO黄伟:AI对产业的驱动不仅是创新更是颠覆
- 大数据的3V和三个层面
- WinForm组件开发:构造ImageButton控件
- istringstream
- 如何学习网络协议(学习笔记)
- 使用Linux LiveCD 评估系统的安全性
- Python中的遇到的错误(持续更新)
- reactjs基础知识:原生事件绑定
- 根文件系统定制【ZT】
- Intel Hyperscan简介
- 在c语言中large的作用,输入两个数组,调用large函数比较,计数,输出统计结果...
- 从前景、待遇、入门难度分析,Java和HTML5哪个好
- php感悟1500,《苏菲的世界》读书笔记及心得感悟1500字
- 《R语言机器学习:实用案例分析》——1.3节使用函数
- 2019数据安装勾选_【登陆、勾选、签名......,你在发票平台遇到的各类问题这里都有答案!】增值税发票综合服务平台常见问题整理(一)...
- Matlab求方差,均值
- 大前研一《思考的技术》
- 全站仪和手机连接软件_测量员APP全站仪设站的的应用说明
- 心已被爱伤透,情已为爱枯竭
- Windows系统盘瘦身指南