由于项目需要,所以用SurfaceView写了一个自定义View,根据晓风飞雨的温度计源码做了一部分修改而来,效果是双汞柱 不废话了 先上源码
package view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import com.example.sc.bloodpressuremeter.R;
import java.text.DecimalFormat;
/**
* TODO: document your custom view class.
*/
public class Thermometer extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private SurfaceHolder mHolder;
private Canvas mCanvas;
//定义左侧范围
int left_temperatureRange = 15;
//定义右侧范围
int right_temperatureRange = 20;
//定义一个盘快的范围
private RectF mRange = new RectF();
//定义温度计的宽度和中心宽度
int mWith;
int mHeight;
int centerWith;
int centerHeight;
//定义温度计刻度总长度
int temperatureAllLong;
//定义一下水银的宽度
int MercuryWith;
//十的倍数的线长度
int MaxLineLong;
//五的倍数的线的长度
int MidLineLong;
//其他刻度线的长度
int MinLineLong;
//左侧刻度间隔
float left_scaleLong;
//右侧刻度间隔
float right_scaleLong;
//定义温度计距离画布的上宽度
float abHeight;
//绘制线条的画笔
private Paint LinePaint;
//绘制文本的画笔
private Paint TextPaint1;
//绘制单位的画笔
private Paint TextPaint;
//设置温度上升的速度
private volatile float mSpeed = 0;
//kpa上升的速度
private volatile float mSpeed_kpa = 0;
//设置背景图
private Bitmap mBitmap;
/**
* 定义初始温度,当前显示正在变化也就是显示的温度,还有目标温度
* 其中,初始温度不变,
* 当前温度是有程序根据不同的速度和目标温度计算出来的,
* 目标温度则是由仪器传送过来的数据
*/
private float BeginTenperature = (float) 0;
private int left_EndTenperature = 300;
private int right_EndTenperature = 40;
private volatile float CurrentTemperature = (float) 0;
private volatile float CurrentLow_hight = (float) 0;
float TargetTemperature = 0;
float Targetlow_hight = 0;
/**
* 定义每一秒绘制的次数
*/
int everySecondTime = 100;
//设置文字的大小
private float mTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SHIFT, 25, getResources().getDisplayMetrics());
private float mTextSize_ten = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SHIFT, 10, getResources().getDisplayMetrics());
private float mSymbolTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SHIFT, 35, getResources().getDisplayMetrics());
private float mShowSymbolTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SHIFT, 45, getResources().getDisplayMetrics());
/**
* 用户绘制的线程
*/
private Thread mThread;
/**
* 根据目标温度改变要显示的当前温度的线程
*/
private Thread mChangeTemperatureThread;
/**
* 设置一个标志位,用于线程的开启还是关闭的标志
*