android自定义进度条图片,[Android自定义控件]带加载进度条的ImageView

博客介绍了在图片上传时实现有加载效果的ImageView的方法。通过自定义LoadingImgView类,重写相关方法,初始化画笔,在onDraw方法中绘制遮蔽层和文字,还提供了设置进度和完成状态的方法,是简单的自定义控件实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候图片上传的时候需要一个有加载效果的ImageView,其实实现起来也非常简单,下面是这个控件的demo

facc6376394fc2b081cd9b4897ccc06b.png

实现:

public class LoadingImgView extends ImageView{

private float per;

private boolean isfinished = false;

private String colorStr;

private Paint paintLayer;

private Paint textPaint;

private Rect textbound;

private float layer_w;

private float layer_h;

public LoadingImgView(Context context) {

super(context);

init();

}

public LoadingImgView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

public LoadingImgView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init();

}

//初始化画笔

private void init(){

paintLayer = new Paint();

paintLayer.setColor(Color.LTGRAY);

paintLayer.setAlpha(100);

textPaint = new Paint();

textPaint.setColor(Color.DKGRAY);

textPaint.setTextSize(25);

textbound = new Rect();

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

if (isfinished)

return;

String perStr = (int) (per*100) + "%";

//获取文字区域的矩形大小,以便确定文字正中间的位置

textPaint.getTextBounds(perStr,0, perStr.length(),textbound);

layer_w = getWidth();

layer_h = getHeight()*per;

float y = getHeight() - layer_h;

//画遮蔽层

canvas.drawRect(0,y,layer_w,getHeight(),paintLayer);

//画文字

canvas.drawText(perStr, getWidth() / 2 - textbound.width() / 2, getHeight() / 2 + textbound.height() / 2, textPaint);

}

public void setPer(float per){

this.per = per;

//在主线程刷新

postInvalidate();

}

public void finish(){

isfinished = true;

postInvalidate();

}

}

其实也没什么要注意的地方,算是最简单的自定义控件之一了。有需要的可以改一改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值