iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android仿字节颜色自定义进度条
  • 421
分享到

Android仿字节颜色自定义进度条

2024-04-02 19:04:59 421人浏览 独家记忆
摘要

本文实例为大家分享了Android仿字节颜色自定义进度条的具体代码,供大家参考,具体内容如下 效果展示 代码实现 第一步:编写自定义属性 res/values/attrs.xml

本文实例为大家分享了Android仿字节颜色自定义进度条的具体代码,供大家参考,具体内容如下

效果展示

代码实现

第一步:编写自定义属性

res/values/attrs.xml


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyLoadingView">
        <attr name="loading_color_one" fORMat="color"/>
        <attr name="loading_color_two" format="color"/>
        <attr name="loading_color_three" format="color"/>
        <attr name="loading_color_four" format="color"/>
        <attr name="loading_color_five" format="color"/>
    </declare-styleable>
</resources>

第二步:编写自定义java类


package com.wust.jingdutiao;
 
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.view.animation.Animation;
 
import androidx.annotation.Nullable;
 

public class MyLoadingView extends View {
 
    private int rect_color_one;
    private int rect_color_two;
    private int rect_color_three;
    private int rect_color_four;
    private int rect_color_five;
    private Paint rect_one_paint;
    private Paint rect_two_paint;
    private Paint rect_three_paint;
    private Paint rect_four_paint;
    private Paint rect_five_paint;
    private int mWidth;
    private int mHeight;
    private float[] mHeightRate = {1/16.0f,1/10.0f,1/8.0f};
    private int HORIZONTAL_OFFSET = 5;
    private int bg_default_color;
    private ValueAnimator va;
 
    public MyLoadingView(Context context) {
        super(context);
    }
 
    public MyLoadingView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initAttrs(context, attrs);
        initPaint();
        initAnima();
    }
 
    public MyLoadingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initAttrs(context, attrs);
        initPaint();
        initAnima();
    }
 
    //设置 属性动画
    private void initAnima() {
        va = ValueAnimator.ofInt(0, 4);
        va.setDuration(3000);
        va.setRepeatCount(ValueAnimator.INFINITE);
        va.setRepeatMode(ValueAnimator.RESTART);
        va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int value = (int) animation.getAnimatedValue();
                setRectColorByNum(value);
            }
        });
        postDelayed(new Runnable() {
            @Override
            public void run() {
                va.start();
            }
        },500);
    }
 
    private void initAttrs(Context context, AttributeSet attrs) {
        //获取用户传来的五种颜色
        TypedArray ty = context.obtainStyledAttributes(attrs, R.styleable.MyLoadingView);
 
        rect_color_one = ty.getColor(R.styleable.MyLoadingView_loading_color_one, Color.parseColor("#325AB4"));
        rect_color_two = ty.getColor(R.styleable.MyLoadingView_loading_color_two, Color.parseColor("#3C8CFF"));
        rect_color_three = ty.getColor(R.styleable.MyLoadingView_loading_color_three, Color.parseColor("#888888"));
        rect_color_four = ty.getColor(R.styleable.MyLoadingView_loading_color_four, Color.parseColor("#00C8D2"));
        rect_color_five = ty.getColor(R.styleable.MyLoadingView_loading_color_five, Color.parseColor("#78E6DC"));
 
        //获取背景色
        try {
            ColorDrawable bg = (ColorDrawable) getBackground();
            bg_default_color = bg.getColor();
        }catch (Exception e){
            bg_default_color = Color.WHITE;
        }
 
        ty.recycle();
    }
 
    //初始化画笔
    private void initPaint() {
        rect_one_paint = getPaintByColor(rect_color_one);
        rect_two_paint = getPaintByColor(rect_color_two);
        rect_three_paint = getPaintByColor(rect_color_three);
        rect_four_paint = getPaintByColor(rect_color_four);
        rect_five_paint = getPaintByColor(rect_color_five);
    }
 
    private Paint getPaintByColor(int Color) {
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setDither(true);
        paint.setColor(Color);
        return paint;
    }
 
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        mWidth = MeasureSpec.getSize(widthMeasureSpec);
        mHeight = MeasureSpec.getSize(heightMeasureSpec);
        //让其为正方形,并且宽高不能小于40
        mWidth = mHeight = Math.max(Math.min(mWidth, mHeight),dp2px(100));
        setMeasuredDimension(mWidth, mHeight);
    }
 
    private int dp2px(int value) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,value,getResources().getDisplayMetrics());
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制矩形
        drawRect(canvas);
 
    }
 
    private void drawRect(Canvas canvas) {
        int centerX = mWidth/2;
        int centerY = mHeight/2;
        RectF rectOne = new RectF(centerX-HORIZONTAL_OFFSET,
                centerY-mWidth*mHeightRate[0],
                centerX+HORIZONTAL_OFFSET,
                centerY+mWidth*mHeightRate[0]);
        canvas.drawRoundRect(rectOne,5,5,rect_one_paint);
 
        RectF rectTwo = new RectF(centerX+HORIZONTAL_OFFSET*3,
                centerY-mWidth*mHeightRate[1],
                centerX+HORIZONTAL_OFFSET*5,
                centerY+mWidth*mHeightRate[1]);
        canvas.drawRoundRect(rectTwo,5,5,rect_two_paint);
 
        RectF rectThree = new RectF(centerX-HORIZONTAL_OFFSET*3,
                centerY-mWidth*mHeightRate[1],
                centerX-HORIZONTAL_OFFSET*5,
                centerY+mWidth*mHeightRate[1]);
        canvas.drawRoundRect(rectThree,5,5,rect_three_paint);
 
        RectF rectFour = new RectF(centerX+HORIZONTAL_OFFSET*7,
                centerY-mWidth*mHeightRate[2],
                centerX+HORIZONTAL_OFFSET*9,
                centerY+mWidth*mHeightRate[2]);
        canvas.drawRoundRect(rectFour,5,5,rect_four_paint);
 
        RectF rectFive = new RectF(centerX-HORIZONTAL_OFFSET*7,
                centerY-mWidth*mHeightRate[2],
                centerX-HORIZONTAL_OFFSET*9,
                centerY+mWidth*mHeightRate[2]);
        canvas.drawRoundRect(rectFive,5,5,rect_five_paint);
    }
 
    //根据属性动画的 变化的值 给画笔换不同的颜色
    private void setRectColorByNum(int num){
        if (num == 0){
            rect_one_paint.setColor(rect_color_one);
            rect_two_paint.setColor(bg_default_color);
            rect_three_paint.setColor(bg_default_color);
            rect_four_paint.setColor(bg_default_color);
            rect_five_paint.setColor(bg_default_color);
        }else if (num == 1){
            rect_one_paint.setColor(bg_default_color);
            rect_two_paint.setColor(rect_color_two);
            rect_three_paint.setColor(rect_color_three);
            rect_four_paint.setColor(bg_default_color);
            rect_five_paint.setColor(bg_default_color);
        }else if (num == 2){
            rect_one_paint.setColor(bg_default_color);
            rect_two_paint.setColor(bg_default_color);
            rect_three_paint.setColor(bg_default_color);
            rect_four_paint.setColor(rect_color_four);
            rect_five_paint.setColor(rect_color_five);
        }else if (num == 3){
            rect_one_paint.setColor(rect_color_one);
            rect_two_paint.setColor(rect_color_two);
            rect_three_paint.setColor(rect_color_three);
            rect_four_paint.setColor(rect_color_four);
            rect_five_paint.setColor(rect_color_five);
        }
        invalidate();
    }
}

第三步:使用


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    android:gravity="center">
 
    <com.wust.jingdutiao.MyLoadingView
        android:layout_width="100dp"
        android:layout_height="100dp"/>
 
</LinearLayout>

到此为止,效果便可以完美实现了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Android仿字节颜色自定义进度条

本文链接: https://www.lsjlt.com/news/132086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android仿字节颜色自定义进度条
    本文实例为大家分享了Android仿字节颜色自定义进度条的具体代码,供大家参考,具体内容如下 效果展示 代码实现 第一步:编写自定义属性 res/values/attrs.xml ...
    99+
    2024-04-02
  • Android中怎么自定义进度条颜色
    今天就跟大家聊聊有关Android中怎么自定义进度条颜色,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。styles.xml找到xml后,进去找到:<style nam...
    99+
    2023-05-30
    android
  • Android自定义圆环式进度条
    安卓自定义圆环式进度条,供大家参考,具体内容如下 需求是实现一个圆环式中间带有进度的进度条,自己动手实现一个 package com.djt.aienglish.widget; ...
    99+
    2024-04-02
  • Android自定义分段式进度条
    安卓自定义分段式的进度条,供大家参考,具体内容如下 前一段时间公司新项目接到一个新需求,其中界面需要用到一个分段式的进度条,找了半天没有发现类似的控件,于是决定自己写一个,话不多说,...
    99+
    2024-04-02
  • android自定义进度条移动效果
    本文实例为大家分享了android实现进度条移动效果的具体代码,供大家参考,具体内容如下 自定义进度条,效果如下: CustomViewActivity.java public...
    99+
    2024-04-02
  • android怎么自定义曲线进度条
    要自定义曲线进度条,您可以按照以下步骤进行操作: 创建一个自定义的View类,继承自ProgressBar类。 在View类...
    99+
    2023-10-26
    android
  • Android自定义圆形进度条效果
    本文实例为大家分享了Android自定义圆形进度条效果的具体代码,供大家参考,具体内容如下 1 控件 RoundProgress package listview.tianhet...
    99+
    2024-04-02
  • python matplotlib自定义colorbar颜色条及内置色条详解
    目录自定义colorbar(draw colorbar without any mapple/plot)contourf函数为所有子图添加一个色带推荐色带与自定义色带总结 ...
    99+
    2024-04-02
  • Android中progressbar怎么设置进度条颜色
    在Android中,可以使用以下方法来设置进度条的颜色:1. 使用`android:progressDrawable`属性来设置进度...
    99+
    2023-08-09
    Android progressbar
  • Android中怎么自定义双向进度条
    本篇文章给大家分享的是有关Android中怎么自定义双向进度条,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。注释基本上就把原理说明了一下。package util;i...
    99+
    2023-05-30
    android
  • Android实现绚丽的自定义进度条
    目录前言效果图实现步骤1.绘制背景圆形矩形2.绘制进度3.绘制文字4.加入动画 完整代码前言 进度条是在Android项目中很常用的组件之一,如果想要理解它是怎么实现的,首...
    99+
    2024-04-02
  • Android自定义View实现圆形进度条
    本文实例为大家分享了Android自定义View实现圆形进度条的具体代码,供大家参考,具体内容如下 原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个...
    99+
    2024-04-02
  • Android怎么自定义View实现圆形进度条
    本文小编为大家详细介绍“Android怎么自定义View实现圆形进度条”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android怎么自定义View实现圆形进度条”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。原...
    99+
    2023-07-02
  • Android中怎么自定义水平渐变进度条
    本篇文章给大家分享的是有关Android中怎么自定义水平渐变进度条,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体实现:新建类,继承自View,在onDraw中进行绘制:im...
    99+
    2023-05-30
    android
  • Android自定义View实现圆形加载进度条
    本文实例为大家分享了Android自定义View实现圆形加载进度条的具体代码,供大家参考,具体内容如下 效果图 话不多说,咱们直接看代码 首先第一种: 1、创建自定义View类 p...
    99+
    2024-04-02
  • Android自定义view实现圆环进度条效果
    本文实例为大家分享了Android自定义view实现圆环进度条效果的具体代码,供大家参考,具体内容如下 一、实现效果图 二、核心代码 自定义view的属性 <xml vers...
    99+
    2024-04-02
  • Android自定义view实现圆形进度条效果
    Android中实现进度条有很多种方式,自定义进度条一般是继承progressBar或继承view来实现,本篇中讲解的是第二种方式。 先上效果图: 实现圆形进度条总体来说并不难,还...
    99+
    2024-04-02
  • Android自定义View圆形进度条控件的方法
    这篇文章主要讲解了Android自定义View圆形进度条控件的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲...
    99+
    2023-05-31
    android roi %d
  • Android中怎么自定义ProgressBar实现酷炫进度条
    要在Android中自定义ProgressBar并实现酷炫的进度条效果,你可以按照以下步骤进行操作:1. 创建一个新的自定义Prog...
    99+
    2023-10-18
    Android
  • Android中怎么自定义渐变颜色效果
    Android中怎么自定义渐变颜色效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。xml定义渐变颜色首先,你在drawable目录下写一个xml,代码如下<xml&...
    99+
    2023-05-30
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作