android 环形时间显示_Android自定义波浪加载圆形进度条——(自定义控件 一)...

本文详细介绍了如何在 Android 中自定义一个波浪形状的圆形进度加载条,包括初始化、测量、绘制等步骤,并实现了点击事件监听。通过调整振幅和周期,动态展示加载进度。
摘要由CSDN通过智能技术生成

自定义控件—— 波浪形状圆形进度加载

时间管理的基础是精力管理,精力的高低、正负分影响到我们的效率

而时间是无法管理的,能够管理的只有自己,透过管理自己的习惯,管理自己的事件来达成对时间的管理。

而在每一天中,人生不丰于做多少事,而在于把重要的事情专注做、用心做,把它做到极致。

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);

/**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值