1 packagecom.example.test;2
3
4
5 importandroid.content.Context;6 importandroid.graphics.Bitmap;7 importandroid.graphics.Canvas;8 importandroid.graphics.Color;9 importandroid.graphics.Paint;10 importandroid.graphics.RectF;11 importandroid.util.AttributeSet;12 importandroid.util.TypedValue;13 importandroid.view.SurfaceHolder;14 importandroid.view.SurfaceView;15
16
17
18 importjava.text.DecimalFormat;19
20 /**
21 * Created by yinxiaofei on 2016/1/13.22 */
23
24 public class Thermometer extends SurfaceView implementsSurfaceHolder.Callback ,Runnable{25
26 privateSurfaceHolder mHolder;27 privateCanvas mCanvas;28
29 //定义温度的范围
30 int temperatureRange=12;31 //定义一个盘快的范围
32 private RectF mRange=newRectF();33 //定义温度计的宽度和中心宽度
34 intmWith;35 intmHeight;36 intcenterWith;37 intcenterHeight;38 //定义总的宽度39
40 //定义温度计刻度总长度
41 inttemperatureAllLong;42
43 //定义一下水银的宽度
44 intMercuryWith;45 //十的倍数的线长度
46 intMaxLineLong;47 //五的倍数的线的长度
48 intMidLineLong;49 //其他刻度线的长度
50 intMinLineLong;51 //刻度间隔
52 intscaleLong;53 //定义温度计距离画布的上宽度
54 intabHeight;55
56 //绘制线条的画笔
57 privatePaint LinePaint;58 //绘制文本的画笔
59 privatePaint TextPaint;60
61 //设置温度上升的速度
62 private volatile float mSpeed=0;63
64 //设置背景图
65 privateBitmap mBitmap;66
67 /**
68 * 定义初始温度,当前显示正在变化也就是显示的温度,还有目标温度69 * 其中,初始温度不变,70 * 当前温度是有程序根据不同的速度和目标温度计算出来的,71 * 目标温度则是由仪器传送过来的数据72 */
73 private float BeginTenperature= (float) 30;74 private int EndTenperature=42;75 private volatile float CurrentTemperature= (float) 30;76
77
78
79 float TargetTemperature=39;80
81 /**
82 * 定义每一秒绘制的次数83 */
84 int everySecondTime=100;85
86 //设置文字的大小
87 private float mTextSize= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SHIFT,25,getResources().getDisplayMetrics());88 private float mSymbolTextSize= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SHIFT,35,getResources().getDisplayMetrics());89 private float mShowSymbolTextSize= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SHIFT,45,getResources().getDisplayMetrics());90 /**
91 *