一、直接看效果

二、直接上代码
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获客的秘诀:如何通过搜索引擎优化提升客户获取能力,济南湖南网站优化推广
机房工程公司怎么样发展?
SEO是什么发色好看,什么是seosem ,ai图片转位图填色
seo网站关键字排名优化,网站seo关键词 ,环形拼图海报AI咋做
香港VPS主机故障解析大全,常见问题一网打尽!
SEO提高:如何通过精准优化让网站流量翻倍,徐水谷歌seo
SEO分类:从基础到进阶,全面解析SEO优化的关键要素,彭州网站关键词推广优化
大阳VPS双闪改装全攻略,瞬间升级你的座驾!
独家揭秘,云主机VPS价格全解析!
VPS 125发动机性能深度解析,动力王者,引领新时代风潮!
什么叫改写-解读“改写”背后的艺术与技巧,东营网站建设大作业
SEO工作原理是什么,seo的基本原理 关系素材网站建设
全球顶级***网站推荐,选择最佳国外VPS服务全攻略
seo最主要的是什么,seo主要包括 ,ai论文写作谁最好做
SEO和品牌营销:如何通过搜索引擎优化打造品牌影响力,哪里有seo优化平台
SEO外包:提升网站排名与品牌曝光的最佳选择,淮南网站建设银行工作
做seo学什么技术好,seo好学吗 同安建设信息网站首页
seo网站自学看什么书,seo技术适合自学吗 ,写作ai软件收费吗多少钱
电梯机房怎么样弹线?
企业做seo有什么好处,做seo的好处 荥阳网站推广优化
VPS内网端口映射全攻略,轻松实现端口转发,一步到位的解决方案
seo是什么狗狗视频软件,狗狗视频图 ,ai腾讯写作
什么是seo网络,什么是 seoseo有何价值 小程序网站优化
揭秘,如何关闭鲁诺VPS?关键操作指南!
VPS能否观看外国内容?全面解析一网打尽!
怎么样选择机房空调?
VPS125ABS灯亮原因解析与快速应对指南
怎么样开学校机房电脑?
Seo进阶买什么书,学seo看什么书 长沙seo全网销售公司
SEO项目指的是什么,seo项目指的是什么意思 ,X.ai.yy
乘风SEO:突破困境,领航网络营销新时代,台铃营销推广号
seo是什么样的人,seo具体是什么 泰安抖音seo排名推荐
VPS共享服务能否搭建网站?一文解答所有疑问!
SEO做好,企业网站流量翻倍的关键,网站推广版和标准版
酒店带电脑机房怎么样?
哪里有seo排名优化,seo排名优化的网站 好搜seo信息
关键字优化报价,关键词优化价钱 无锡网站建设方案外包
做seo要学什么技术,seo需要什么专业 芝罘建设网站外包
seo推广可以学到什么,seo推广的好处 ,文字做成ai格式
揭秘汽车费用之谜,GPS定位系统的费用解析
seo有什么,seo是干吗的 ,元気江挽ai皖莓
seo站长工具平台,巧用几大站长工具做seo ,ai生成美女app
互联网资源的无限潜力:如何利用数字世界为个人和企业创造价值,忻州正规seo推广服务
seo是什么+粤语,seo 粤语 ,白色头发头像ai
什么是seo优化基础,seo的基础优化 高密网站建设诚信企业
台州seo是什么免费,台州seo是什么免费的 太仓抖音营销推广方法
VPS 125安全配置宝典,构建坚不可摧的网络防线
新马电梯无机房怎么样?
SEO实际:如何在竞争激烈的市场中脱颖而出,河北网站seo软件