广告
返回顶部
首页 > 资讯 > 精选 >Android中怎么自定义view实现圆环进度条效果
  • 419
分享到

Android中怎么自定义view实现圆环进度条效果

2023-06-29 05:06:14 419人浏览 八月长安
摘要

这篇文章主要讲解了“Android中怎么自定义view实现圆环进度条效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android中怎么自定义view实现圆环进度条效果”吧!核心代码自定义

这篇文章主要讲解了“Android中怎么自定义view实现圆环进度条效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android中怎么自定义view实现圆环进度条效果”吧!

核心代码

自定义view的属性

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="RingProgressBar">        <attr name="rinGColor" fORMat="color" />        <attr name="ringProgressColor" format="color" />        <attr name="ringWidth" format="dimension"></attr>        <attr name="textColor" format="color" />        <attr name="textSize" format="dimension" />        <attr name="max" format="integer"></attr>        <attr name="textIsDisplayable" format="boolean"></attr>        <attr name="style">            <enum name="STROKE" value="0"></enum>            <enum name="FILL" value="1"></enum>        </attr>    </declare-styleable></resources>

自定义view

package com.czhappy.ringprogressdemo.view;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.Typeface;import android.util.AttributeSet;import android.util.Log;import android.view.View;import com.czhappy.ringprogressdemo.R;public class RingProgressBar extends View {        private Paint ringPaint;    private Paint ringProgressPaint;    private Paint txtPaint;        private int ringColor;        private int ringProgressColor;        private int textColor;        private float textSize;        private float ringWidth;        private int max;        private int progress;        private boolean textIsDisplayable;    private Context mContext;        private int style;    public static final int STROKE = 0;    public static final int FILL = 1;    public RingProgressBar(Context context) {        this(context, null);    }    public RingProgressBar(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public RingProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        this.mContext = context;        // 获取自定义的属性        initAttrs(context, attrs);        initPaint();    }    private void initAttrs(Context context, AttributeSet attrs) {        TypedArray mTypedArray = context.obtainStyledAttributes(attrs,                R.styleable.RingProgressBar);        //获取自定义属性和默认值        ringColor = mTypedArray.getColor(R.styleable.RingProgressBar_ringColor, Color.GRAY);        ringProgressColor = mTypedArray.getColor(R.styleable.RingProgressBar_ringProgressColor, Color.GREEN);        textColor = mTypedArray.getColor(R.styleable.RingProgressBar_textColor, Color.GREEN);        textSize = mTypedArray.getDimension(R.styleable.RingProgressBar_textSize, 16);        ringWidth = mTypedArray.getDimension(R.styleable.RingProgressBar_ringWidth, 5);        max = mTypedArray.getInteger(R.styleable.RingProgressBar_max, 100);        textIsDisplayable = mTypedArray.getBoolean(R.styleable.RingProgressBar_textIsDisplayable, true);        style = mTypedArray.getInt(R.styleable.RingProgressBar_style, 0);        //资源回收        mTypedArray.recycle();    }        private void initPaint() {        //圆环画笔        ringPaint = new Paint();        ringPaint.setColor(ringColor); //设置圆环的颜色        ringPaint.setStyle(Paint.Style.STROKE); //设置空心        ringPaint.setStrokeWidth(ringWidth); //设置圆环的宽度        ringPaint.setAntiAlias(true);  //消除锯齿        //圆环进度画笔        ringProgressPaint = new Paint();        ringProgressPaint.setColor(ringProgressColor); //设置圆环的颜色        ringProgressPaint.setStrokeWidth(ringWidth); //设置圆环的宽度        ringProgressPaint.setAntiAlias(true);  //消除锯齿        switch (style) {            case STROKE:                ringProgressPaint.setStyle(Paint.Style.STROKE);                break;            case FILL:                ringProgressPaint.setStyle(Paint.Style.FILL_AND_STROKE);                break;        }        //百分比文字画笔        txtPaint = new Paint();        txtPaint.setColor(textColor);        txtPaint.setTextSize(textSize);        txtPaint.setTypeface(Typeface.DEFAULT_BOLD); //设置字体    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //圆心坐标        int mXCenter = getWidth() / 2;        int mYCenter = getHeight() / 2;        int radius = (int) (mXCenter - ringWidth / 2); //圆环的半径        //绘制圆环        canvas.drawCircle(mXCenter, mYCenter, radius, ringPaint);        //绘制圆环进度        RectF oval = new RectF(mXCenter - radius, mYCenter - radius, mXCenter                + radius, mYCenter + radius);  //用于定义的圆弧的形状和大小的界限        switch (style) {            case STROKE:                canvas.drawArc(oval, -90, 360 * progress / max, false, ringProgressPaint);  //根据进度画圆弧                break;            case FILL:                if (progress != 0)                    canvas.drawArc(oval, -90, 360 * progress / max, true, ringProgressPaint);  //根据进度画圆弧                break;        }        //绘制百分比数字        //文字绘制        String txt = progress  + "%";        //文字的长度        float mTxtWidth = txtPaint.measureText(txt, 0, txt.length());        Log.e("tag", textIsDisplayable+","+progress+(style==STROKE));        if(textIsDisplayable && progress!=0 && style==STROKE){            canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter+textSize/2, txtPaint);        }    }    public synchronized int getMax() {        return max;    }        public synchronized void setMax(int max) {        if(max < 0){            throw new IllegalArgumentException("max not less than 0");        }        this.max = max;    }        public synchronized int getProgress() {        return progress;    }        public synchronized void setProgress(int progress) {        if(progress < 0){            throw new IllegalArgumentException("progress not less than 0");        }        if(progress > max){            progress = max;        }        if(progress <= max){            this.progress = progress;            postInvalidate();        }    }    public int getRingColor() {        return ringColor;    }    public void setRingColor(int ringColor) {        this.ringColor = ringColor;    }    public int getRingProgressColor() {        return ringProgressColor;    }    public void setRingProgressColor(int ringProgressColor) {        this.ringProgressColor = ringProgressColor;    }    public int getTextColor() {        return textColor;    }    public void setTextColor(int textColor) {        this.textColor = textColor;    }    public float getTextSize() {        return textSize;    }    public void setTextSize(float textSize) {        this.textSize = textSize;    }    public float getRingWidth() {        return ringWidth;    }    public void setRingWidth(float roundWidth) {        this.ringWidth = roundWidth;    }}

MainActivity.java

package com.czhappy.ringprogressdemo.activity;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import com.czhappy.ringprogressdemo.R;import com.czhappy.ringprogressdemo.view.RingProgressBar;public class MainActivity extends AppCompatActivity {    private RingProgressBar myProgress;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        myProgress = (RingProgressBar) findViewById(R.id.myProgress);    }    public void beginAnim(View view){        new Thread(){            @Override            public void run() {                super.run();                for(int i=0; i<=60; i++){                    try {                        Thread.sleep(20);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    myProgress.setProgress(i);                }            }        }.start();    }}

布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"    xmlns:ring="http://schemas.android.com/apk/res-auto"    android:id="@+id/activity_main"    android:gravity="center_horizontal"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <Button        android:layout_width="match_parent"        android:onClick="beginAnim"        android:layout_height="wrap_content"        android:text="开始动画"/>    <com.czhappy.ringprogressdemo.view.RingProgressBar        android:id="@+id/myProgress"        android:layout_width="100dp"        android:layout_height="100dp"        android:layout_marginTop="20dp"        ring:ringColor="@color/ring_color"        ring:ringProgressColor="@color/ring_progress_color"        ring:textColor="@color/ring_progress_color"        ring:textIsDisplayable="true"        ring:ringWidth="6dp"        ring:textSize="16sp"/></LinearLayout>

感谢各位的阅读,以上就是“Android中怎么自定义view实现圆环进度条效果”的内容了,经过本文的学习后,相信大家对Android中怎么自定义view实现圆环进度条效果这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Android中怎么自定义view实现圆环进度条效果

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

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

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

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

下载Word文档
猜你喜欢
  • Android自定义view实现圆环进度条效果
    本文实例为大家分享了Android自定义view实现圆环进度条效果的具体代码,供大家参考,具体内容如下 一、实现效果图 二、核心代码 自定义view的属性 <xml vers...
    99+
    2022-11-13
  • Android中怎么自定义view实现圆环进度条效果
    这篇文章主要讲解了“Android中怎么自定义view实现圆环进度条效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android中怎么自定义view实现圆环进度条效果”吧!核心代码自定义...
    99+
    2023-06-29
  • Android自定义view实现圆形进度条效果
    Android中实现进度条有很多种方式,自定义进度条一般是继承progressBar或继承view来实现,本篇中讲解的是第二种方式。 先上效果图: 实现圆形进度条总体来说并不难,还...
    99+
    2022-11-13
  • android自定义view制作圆形进度条效果
    还是我们自定View的那几个步骤: 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 [ 3、重写onMesure ] 4、重写onDraw 1、自定...
    99+
    2022-06-06
    view 进度条 Android
  • Android怎么自定义View实现圆弧进度效果
    这篇文章主要介绍“Android怎么自定义View实现圆弧进度效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么自定义View实现圆弧进度效果”文章能帮助大家解决问题。技术实现Ar...
    99+
    2023-07-06
  • Android怎么自定义View实现圆形进度条
    本文小编为大家详细介绍“Android怎么自定义View实现圆形进度条”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android怎么自定义View实现圆形进度条”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。原...
    99+
    2023-07-02
  • Android自定义View实现圆形进度条
    本文实例为大家分享了Android自定义View实现圆形进度条的具体代码,供大家参考,具体内容如下 原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个...
    99+
    2022-11-13
  • Android自定义view实现半圆环效果
    本文实例为大家分享了Android自定义view实现半圆环的具体代码,供大家参考,具体内容如下 1.自定义属性 <declare-styleable name="Semicir...
    99+
    2022-11-13
  • Android自定义圆形进度条效果
    本文实例为大家分享了Android自定义圆形进度条效果的具体代码,供大家参考,具体内容如下 1 控件 RoundProgress package listview.tianhet...
    99+
    2022-11-12
  • Android自定义View实现圆形加载进度条效果的方法
    这篇文章将为大家详细讲解有关Android自定义View实现圆形加载进度条效果的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。View仿华为圆形加载进度条效果图实现思路可以看出该View可分为三个部分...
    99+
    2023-05-30
    android view 进度条
  • Android自定义View实现圆环交替效果
    下面请先看效果图:    看上去是不很炫的样子,它的实现上也不是很复杂,重点在与onDraw()方法的绘制。 首先是我们的attrs文件: <?xml ver...
    99+
    2022-06-06
    view Android
  • Android自定义view实现进度条指示效果
    先看看效果图: 首先是布局文件 <FrameLayout android:layout_width="match_parent" android:layout_...
    99+
    2022-06-06
    view 进度条 Android
  • Android自定义View实现圆形加载进度条
    本文实例为大家分享了Android自定义View实现圆形加载进度条的具体代码,供大家参考,具体内容如下 效果图 话不多说,咱们直接看代码 首先第一种: 1、创建自定义View类 p...
    99+
    2022-11-13
  • Android如何自定义view实现半圆环效果
    小编给大家分享一下Android如何自定义view实现半圆环效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下1.自定义属性<declare-s...
    99+
    2023-06-29
  • Android自定义View实现钟摆效果进度条PendulumView
    在网上看到了一个IOS组件PendulumView,实现了钟摆的动画效果。由于原生的进度条确实是不好看,所以想可以自定义View实现这样的效果,以后也可以用于加载页面的进度条。...
    99+
    2022-06-06
    view Android
  • 怎么在Android中通过自定义View实现一个环形进度条效果
    这篇文章给大家介绍怎么在Android中通过自定义View实现一个环形进度条效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。功能分析虽然功能比较简单,但是仍然需要仔细分析    ...
    99+
    2023-05-31
    android view roi
  • Android中怎么通过自定义view实现进度条加载效果
    Android中怎么通过自定义view实现进度条加载效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分析图:代码如下:package com.example.d...
    99+
    2023-05-30
    android view
  • 怎么在Android中自定义一个圆形进度条效果
    怎么在Android中自定义一个圆形进度条效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系...
    99+
    2023-06-14
  • 详解Android如何自定义view实现圆形进度条
    Android中实现进度条有很多种方式,自定义进度条一般是继承progressBar或继承view来实现,本篇中讲解的是第二种方式。 先上效果图: 实现圆形进度条总体来说并不难,还...
    99+
    2022-11-13
  • Android实现自定义圆形进度条
    今天无意中发现一个圆形进度,想想自己实现一个,如下图: 基本思路是这样的: 1.首先绘制一个实心圆 2.绘制一个白色实心的正方形,遮住实心圆 3.在圆的中心动态绘制当前进度的...
    99+
    2022-06-06
    自定义 进度条 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作