一、直接看效果

二、直接上代码
1.自定义控件部分
package com.susan.project.myapplication;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
/**
* @author dahai
* @ClassName: ${type_name}
* @Description: ${todo}
* @date ${date} ${time}
* @email 202591024@qq.com
* @since $android
渐变
进度条
*/
public class ProgressSeek extends View {
/**
* 进度条的宽度
*/
private int view_width;
/**
* 画布的宽度
*/
private int view_base_width;
/**
* 控件的宽度
*/
private int view_edge_width;
/**
* 进度
*/
private int progress;
private Canvas cacheCanvas;
/**
* 背景颜色的画笔
*/
private Paint backgroundPaint;
/**
* 进度条的画笔
*/
private Paint progressPaint;
/**
* 进度末端的图
*/
private Bitmap bitmap;
private int bitmapWidth;
private int bitmapHeight;
private Context context;
//渐变色开始
private static final int DEFAULT_START_COLOR = Color.parseColor("#34DAB5");
//渐变色结束
private static final int DEFAULT_END_COLOR = Color.parseColor("#27A5FE");
/**
* 缓存图片
*/
private Bitmap cacheBitmap;
public ProgressSeek(Context context) {
super(context);
initView(context);
}
public ProgressSeek(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public ProgressSeek(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
private void initView(Context context) {
this.context = context;
bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.thumb);
bitmapWidth = bitmap.getWidth();
bitmapHeight = bitmap.getHeight();
backgroundPaint = new Paint();
backgroundPaint.setStrokeWidth(bitmapWidth);
backgroundPaint.setColor(Color.parseColor("#cccccc"));
backgroundPaint.setDither(true);
backgroundPaint.setAntiAlias(true);
progressPaint = new Paint();
progressPaint.setStrokeWidth(bitmapWidth);
progressPaint.setDither(true);
progressPaint.setAntiAlias(true);
DisplayMetrics d = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(d);
view_base_width = d.widthPixels;
}
public void init(int progress) {
this.progress = progress;
if (view_width == 0) {//第一上来
/* DisplayMetrics d = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(d);
view_width = d.widthPixels*progress/100;*/
view_width = view_base_width * progress / 100;
} else {
view_width = view_edge_width * progress / 100;
}
if (cacheBitmap != null) {
if (!cacheBitmap.isRecycled()) {
cacheBitmap.recycle();
cacheBitmap = null;
}
cacheCanvas = null;
}
cacheBitmap = Bitmap.createBitmap(view_base_width, bitmapHeight * 2, Bitmap.Config.ARGB_8888);
if (cacheCanvas == null) {
cacheCanvas = new Canvas();
cacheCanvas.setBitmap(cacheBitmap);
}
/**
* 画背景
*/
RectF r = new RectF();
r.left = 0;
r.top = bitmapHeight;
r.right = view_base_width;
r.bottom = bitmapWidth + 10;
cacheCanvas.drawRoundRect(r, 5f, 5f, backgroundPaint);
if (progress > 0) {
LinearGradient lg = new LinearGradient(0, 0, view_width, bitmapWidth, DEFAULT_START_COLOR, DEFAULT_END_COLOR, Shader.TileMode.CLAMP);
progressPaint.setShader(lg);
RectF r1 = new RectF();
r.left = 0;
r.top = bitmapHeight;
r.right = view_width;
r.bottom = bitmapWidth + 10;
cacheCanvas.drawRoundRect(r, 5f, 5f, progressPaint);
cacheCanvas.drawBitmap(bitmap, view_width - bitmapWidth+8, bitmapHeight / 2 + 6, new Paint());
}
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint bmpPaint = new Paint();
//将cacheBitmap绘制到该View组件
if (cacheBitmap != null) {
canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);
}
view_edge_width = this.getWidth();
Log.e("打出来看看控件的宽度:", view_edge_width + "");
init(progress);
}
}
3. 布局文件部分
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.susan.project.myapplication.ProgressSeek
android:id="@+id/progress"
android:layout_width="match_parent"
android:layout_height="80dp">
</com.susan.project.myapplication.ProgressSeek>
<com.susan.project.myapplication.ProgressSeek
android:id="@+id/progress1"
android:layout_width="match_parent"
android:layout_height="80dp">
</com.susan.project.myapplication.ProgressSeek>
<com.susan.project.myapplication.ProgressSeek
android:id="@+id/progress2"
android:layout_width="match_parent"
android:layout_height="80dp">
</com.susan.project.myapplication.ProgressSeek>
<com.susan.project.myapplication.ProgressSeek
android:id="@+id/progress3"
android:layout_width="match_parent"
android:layout_height="80dp">
</com.susan.project.myapplication.ProgressSeek>
</LinearLayout>
4.Activity部分
package com.susan.project.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
private ProgressSeek progress;
private ProgressSeek progress1;
private ProgressSeek progress2;
private ProgressSeek progress3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progress = (ProgressSeek) findViewById(R.id.progress);
progress.init(0);
progress1 = (ProgressSeek) findViewById(R.id.progress1);
progress1.init(2);
progress2 = (ProgressSeek) findViewById(R.id.progress2);
progress2.init(50);
progress3 = (ProgressSeek) findViewById(R.id.progress3);
progress3.init(100);
}
}
以上所述是小编给大家介绍的Android自定义带水滴的进度条样式(带渐变色效果),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
相关推荐:
seo推广什么方法,seo推广效果怎么样 ,ai大战ai围棋谁赢过
VPS SSH密钥设置指南,安全连接,轻松配置
揭秘神秘远程拨号神器,VPS究竟是何等存在?
机房断电重启会怎么样?
VPS竖型封口机,高效精准,封口首选之选
企业做seo有什么好处,做seo的好处 荥阳网站推广优化
怎么样在机房不被控屏?
电脑DIY搭建VPS,云端自由触手可及!
seo是什么级别,seo是什么工资 ,ai disable
seo是什么熊掌号,seo是什么意思seo是什么职位 小红书的营销推广类型
SEO找出网站流量提升的终极策略,带你走向搜索引擎巅峰!,辛集竞价网站推广哪家好
seo帽子是什么,seo帽子是什么意思 台州网站推广威欣hfqjwl下拉
揭秘VPS云桌面,概念、应用与实战解析
SEO难吗?揭秘SEO背后的真相,让你轻松上手!,seo特训营维修模板
SEO数量-如何提升你的网站排名与流量?,SEO中词性识别的描述
SEO出超:如何通过精准优化实现网站流量大爆发,看qq群数据seo
个性化酷Q环境轻松搭建指南,利用VPS实现高效挂酷体验新篇章
seo组建需要什么条件,seo建站的步骤 ,AI软件怎么竖着打字
seo网站排名优化哪家好,seo网站优化平台 ,不要和AI
互联网快排:助力企业网站流量爆发的秘密武器,江门新站seo步骤
seo站长什么意思,站长工具 - seo综合查询 ,ai描边字
SEO优化如何提升网站排名,驾驭搜索引擎流量,动态网站建设方案模板
东南亚VPS动态IP解析揭秘与深度探索
seo是什么物质,seo到底是什么 ,ai5858697
醴陵陶机房子怎么样?
SEO怎么做才能提升网站流量与排名?这篇文章给你全攻略,自助网站建设优化企业
产品seo什么意思,产品seo标题是什么 ,变频器AI与ao
阿里云Gentoo2VPS,云服务高效虚拟化部署的新选择
什么叫seo搜索,seo搜索引擎技术 展厅多媒体素材网站推广
seo用什么app公司,seo软件推荐 seo网站优化推广服务
SEO是什么化学,seo是啥意思啊 ,牛奶包装ai关键词
SEO建议:如何通过优化提升网站流量,赢得市场竞争,DTNL课件网站建设
seo技巧是什么意思,seo实战技巧 江苏seo公司有哪些
SEO占位:如何在竞争激烈的市场中占得先机?,长沙县营销推广网站
为什么seo这么麻烦,seo是什么意思 为什么要做seo ,ai笔画写字
seo属于什么职能类别,seo属于什么职能类别的 天门网站推广哪里好做
seo是什么职业 社区,seo属于什么职业 ,ai科技挂画
永城科士达机房空调怎么样?
为什么做抖音seo,为什么做抖音推广 ,视频AI 安维尔
金马家具机房怎么样?
SEO客服:如何提升客户体验与业务转化的双赢策略,揭阳关键词排名优势
腾讯云香港机房怎么样?
VPS直播的可行性解析,适用于直播的最佳选择吗?
seo灵魂是什么意思,seo灵魂是什么意思啊 网站建设用哪个网站
SEO详解:如何优化你的网站提升排名,获得更多流量,赤水seo网站优化
做seo要投入什么资源,seo做什么项目好 邢台网站推广推荐
SEO文案:如何通过巧妙布局提升网站排名,吸引更多流量,长安鞋网站推广优化
seo网站排名关键词优化,seo网站关键词优化怎么做 ,男头侧脸ai
深度解析,宝马VPS费用全揭秘,真实花费究竟是多少?
做seo要投入什么,做seo要投入什么资金 桦甸网站建设哪家好