实现效果图如下所示:
主要代码如下:
/**
* 自定义一个View继承ImageView,增加一个通用的旋转图片资源的方法
* @author Johnny
*
*/
public class CompassView extends ImageView {
private float mDirection;// 方向旋转浮点数
private Drawable compass;// 图片资源
//三个构造器
public CompassView(Context context) {
super(context);
mDirection = 0.0f;// 默认不旋转
compass = null;
}
public CompassView(Context context, AttributeSet attrs) {
super(context, attrs);
mDirection = 0.0f;
compass = null;
}
public CompassView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mDirection = 0.0f;
compass = null;
}
@Override
protected void onDraw(Canvas canvas) {
if (compass == null) {
compass = getDrawable();// 获取当前view的图片资源
compass.setBounds(0, 0, getWidth(), getHeight());// 图片资源在view的位置,此处相当于充满view
}
canvas.save();
canvas.rotate(mDirection, getWidth() / 2, getHeight() / 2);// 绕图片中心点旋转,
compass.draw(canvas);// 把旋转后的图片画在view上,即保持旋转后的样子
canvas.restore();// 保存一下
}
/**
* 自定义更新方向的方法
*
* @param direction
* 传入的方向
*/
public void updateDirection(float direction) {
mDirection = direction;
postInvalidate();// 重新刷新一下,更新方向
}
}
/**
* @author Johnny
* 自定义进度视图类
*/
public class RoundProgressBar extends View {
/**
* 画笔对象的引用
*/
private Paint paint;
Shader mRadialGradient = null;
/**
* 圆环的颜色
*/
private int roundColor;
/**
* 圆环进度的颜色
*/
private int roundProgressColor;
/**
* 中间进度百分比的字符串的颜色
*/
private int textColor;
/**
* 中间进度百分比的字符串的字体
*/
private float textSize;
/**
* 圆环的宽度
*/
private float roundWidth;
/**
* 最大进度
*/
private int max;
/