自定义控件—— 波浪形状圆形进度加载
时间管理的基础是精力管理,精力的高低、正负分影响到我们的效率
而时间是无法管理的,能够管理的只有自己,透过管理自己的习惯,管理自己的事件来达成对时间的管理。
而在每一天中,人生不丰于做多少事,而在于把重要的事情专注做、用心做,把它做到极致。
1、效果简阅
2、实现思路设计
3、初始化操作
private void init(Context context) {
//绘制圆形的 Paint
mCicrlPaint = new Paint();
mCicrlPaint.setAntiAlias(true);
mCicrlPaint.setColor(Color.BLUE);
//绘制进度的 Paint
mProgressPaint = new Paint();
mProgressPaint.setAntiAlias(true);
mProgressPaint.setColor(Color.RED);
//设置只绘制重叠的部分
mProgressPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//绘制文字的 Paint
mTextPaint = new Paint();
mTextPaint.setAntiAlias(true);
mTextPaint.setColor(Color.WHITE);
mTextPaint.setTextSize(20);
//绘制进度的Path
mPath = new Path();
/**
* 手势识别监听
*/
final GestureDetector gestureDetector = new GestureDetector(listener);
/**
* 将触摸识别事件传递给 GestureDetector
*/
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
this.setClickable(true);
//设置布局加载监听
this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//更新控件的大小
viewHeight = ProgressView.this.getHeight();
viewWidth = ProgressView.this.getWidth();
//创建 bitmap 与 canvas
bitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(bitmap);
/**
* 更新默认设置
*/
updateDefaulBuildValue();
}
});
}
GestureDetector.SimpleOnGestureListener listener = new GestureDetector.SimpleOnGestureListener() {
/**
* 单击点击监听
* @param e
* @return
*/
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
System.out.println("sing click ");
if (clickListener != null) {
clickListener.onSingleClick(e);
return true;
}
return super.onSingleTapConfirmed(e);
}
/**
* 双击点击监听
* @param e
* @return
*/
@Override
public boolean onDoubleTap(MotionEvent e) {
if (clickListener != null) {
clickListener.onDoubleClick(e);
}
return super.onDoubleTap(e);
}
/**
* 常按事件监听
* @param e
*/
@Override
public void onLongPress(MotionEvent e) {
if (clickListener != null) {
clickListener.onLongPressClick(e);
}
super.onLongPress(e);
}
};
同时设置了点击事件的监听接口回调
/**
* 控件 点击事件监听 回调
*/
public interface OnWaveProgressClickListener {
/**
* 单击回调接口
* @param e
*/
public void onSingleClick(MotionEvent e);
/**
* 双击回调接口
* @param e
*/
public void onDoubleClick(MotionEvent e);
/**
* 找按回调接口
* @param e
*/
public void onLongPressClick(MotionEvent e);
}
private OnWaveProgressClickListener clickListener;
/**
* 设置控件的点击事件
*
* @param listener
*/
public void setWaveOnClickListener(OnWaveProgressClickListener listener) {
this.clickListener = listener;
}
4、测量
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
/**