iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android中怎么实现一个炫酷进度条效果
  • 464
分享到

Android中怎么实现一个炫酷进度条效果

android 2023-05-30 19:05:14 464人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关Android中怎么实现一个炫酷进度条效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HorizontalProgressbarWithProgress的代码impor

这期内容当中小编将会给大家带来有关Android中怎么实现一个炫酷进度条效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

HorizontalProgressbarWithProgress的代码

import android.content.Context;import android.content.res.TypedArray;import android.graphics.canvas;import android.graphics.Paint;import android.os.Build;import android.support.annotation.Requiresapi;import android.util.AttributeSet;import android.util.TypedValue;import android.widget.ProgressBar;import trunk.doi.base.R;public class HorizontalProgressbarWithProgress extends ProgressBar{ private static final int DEFAULT_TEXT_SIZE=10;//sp private static final int DEFAULT_TEXT_COLOR=0xFFFC00D1; private static final int DEFAULT_COLOR_UNREACH=0xFFD3D6DA; private static final int DEFAULT_HEIGHT_UNREACH=2;//dp private static final int DEFAULT_COLOR_REACH=DEFAULT_TEXT_COLOR; private static final int DEFAULT_HEIGHT_REACH=2; private static final int DEFAULT_TEXT_OFFSET=10; protected int mTextSize=sp2px(DEFAULT_TEXT_SIZE); protected int mTextColor=DEFAULT_TEXT_COLOR; protected int mUnReachColor=DEFAULT_COLOR_UNREACH; protected int mUnReachHeigh=dp2px(DEFAULT_HEIGHT_UNREACH); protected int mReachHeigh=dp2px(DEFAULT_HEIGHT_REACH); protected int mReachColor=DEFAULT_COLOR_REACH; protected int mTextOffset=dp2px(DEFAULT_TEXT_OFFSET); protected Paint mPaint=new Paint(); protected int mRealWidth; public HorizontalProgressbarWithProgress(Context context) {  super(context);  init(null); } public HorizontalProgressbarWithProgress(Context context, AttributeSet attrs) {  super(context, attrs);  init(attrs); } public HorizontalProgressbarWithProgress(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  init(attrs); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public HorizontalProgressbarWithProgress(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {  super(context, attrs, defStyleAttr, defStyleRes);  init(attrs); } private void init(AttributeSet attrs) {    TypedArray array=getContext().obtainStyledAttributes(attrs, R.styleable.HorizontalProgressbarWithProgress);  mTextSize= (int) array.getDimension(R.styleable.HorizontalProgressbarWithProgress_progress_text_size,mTextSize);  mTextColor=array.getColor(R.styleable.HorizontalProgressbarWithProgress_progress_text_color,mTextColor);  mUnReachColor=array.getColor(R.styleable.HorizontalProgressbarWithProgress_progress_unreach_color,mUnReachColor);  mUnReachHeigh=(int) array.getDimension(R.styleable.HorizontalProgressbarWithProgress_progress_unreach_height,mUnReachHeigh);  mReachHeigh=(int) array.getDimension(R.styleable.HorizontalProgressbarWithProgress_progress_reach_height,mReachHeigh);  mTextOffset=(int) array.getDimension(R.styleable.HorizontalProgressbarWithProgress_progress_text_offset,mTextOffset);  mReachColor=array.getColor(R.styleable.HorizontalProgressbarWithProgress_progress_reach_color,mReachColor);  array.recycle();  mPaint.setTextSize(mTextSize); } @Override protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//  int widthMode=MeasureSpec.getMode(widthMeasureSpec);  int width=MeasureSpec.getSize(widthMeasureSpec);  int heigh=measureHeight(heightMeasureSpec);  setMeasuredDimension(width,heigh);  mRealWidth=getMeasuredWidth()-getPaddingLeft()-getPaddingRight(); } private int measureHeight(int heightMeasureSpec) {  int result=0;  int mode=MeasureSpec.getMode(heightMeasureSpec);  int size=MeasureSpec.getSize(heightMeasureSpec);  if(mode==MeasureSpec.EXACTLY){   result=size;  }else{   int textHeigh= (int) (mPaint.descent()-mPaint.ascent());   result=getPaddingTop()+getPaddingBottom()+Math.max(Math.max(mReachHeigh,mUnReachHeigh),Math.abs(textHeigh));   if(mode==MeasureSpec.AT_MOST){    result=Math.min(result,size);   }  }  return result; } @Override protected synchronized void onDraw(Canvas canvas) {  canvas.save();  canvas.translate(getPaddingLeft(),getHeight()/2);  boolean noNeedUnReach=false;  String text=getProgress()+"%";  int textWidth= (int) mPaint.measureText(text);  float radio =getProgress()*1.0f/getMax();  float progressX=radio*mRealWidth;  if(progressX+textWidth>mRealWidth){   progressX=mRealWidth-textWidth;   noNeedUnReach=true;  }  float endX=progressX-mTextOffset/2;  if(endX>0){   mPaint.setColor(mReachColor);   mPaint.setStrokeWidth(mReachHeigh);   canvas.drawLine(0,0,endX,0,mPaint);  }  //draw text  mPaint.setColor(mTextColor);  int y = (int) (-(mPaint.descent()+mPaint.ascent())/2);  canvas.drawText(text,progressX,y,mPaint);  //draw unreach bar  if(!noNeedUnReach){   float startX=progressX+ mTextOffset/2+textWidth;   mPaint.setColor(mUnReachColor);   mPaint.setStrokeWidth(mUnReachHeigh);   canvas.drawLine(startX,0,mRealWidth,0,mPaint);  }  canvas.restore(); } protected int dp2px(int dpVal){  return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dpVal,getResources().getDisplayMetrics()); } protected int sp2px(int spVal){  return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,spVal,getResources().getDisplayMetrics()); }}

RoundProgressBarWithProgress的代码

import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.RectF;import android.os.Build;import android.support.annotation.RequiresApi;import android.util.AttributeSet;import trunk.doi.base.R;public class RoundProgressBarWithProgress extends HorizontalProgressbarWithProgress { private int mRadius=dp2px(30); private int mMaxPaintWidth; public RoundProgressBarWithProgress(Context context) {  super(context);  init(null); } public RoundProgressBarWithProgress(Context context, AttributeSet attrs) {  super(context, attrs);  init(attrs); } public RoundProgressBarWithProgress(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  init(attrs); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public RoundProgressBarWithProgress(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {  super(context, attrs, defStyleAttr, defStyleRes);  init(attrs); } private void init(AttributeSet attrs){  mReachHeigh= (int) (mUnReachHeigh*2.5f);  TypedArray array=getContext().obtainStyledAttributes(attrs, R.styleable.RoundProgressBarWithProgress);  mRadius=(int) array.getDimension(R.styleable.RoundProgressBarWithProgress_radius,mRadius);  array.recycle();  mPaint.setStyle(Paint.Style.STROKE);  mPaint.setAntiAlias(true);  mPaint.setDither(true);  mPaint.setStrokeCap(Paint.Cap.ROUND); } @Override protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  mMaxPaintWidth=Math.max(mReachHeigh,mUnReachHeigh);  //默认4个padding一致  int except=mRadius*2+mMaxPaintWidth+getPaddingLeft()+getPaddingRight();  int width=resolveSize(except,widthMeasureSpec);  int height=resolveSize(except,heightMeasureSpec);  int realWidth=Math.min(width,height);  mRadius=(realWidth-getPaddingLeft()-getPaddingRight()-mMaxPaintWidth)/2;  setMeasuredDimension(realWidth,realWidth); } @Override protected synchronized void onDraw(Canvas canvas) {  String text=getProgress()+"%";  float textWidth=mPaint.measureText(text);  float textHeight=(mPaint.ascent()+mPaint.descent())/2;  canvas.save();  canvas.translate(getPaddingLeft(),getPaddingTop());  mPaint.setStyle(Paint.Style.STROKE);  // draw unreachbar  mPaint.setColor(mUnReachColor);  mPaint.setStrokeWidth(mUnReachHeigh);  canvas.drawCircle(mRadius,mRadius,mRadius,mPaint);  //draw reach bar  mPaint.setColor(mReachColor);  mPaint.setStrokeWidth(mReachHeigh);  float sweepAngle=getProgress()*1.0f/getMax()*360;  canvas.drawArc(new RectF(0,0,mRadius*2,mRadius*2),0,sweepAngle,false,mPaint);  //draw text  mPaint.setColor(mTextColor);  mPaint.setStyle(Paint.Style.FILL);  canvas.drawText(text,mRadius-textWidth/2,mRadius-textHeight,mPaint);  canvas.restore(); }}

activity_view_mv代码

<?xml version="1.0" encoding="utf-8"?><RelativeLayout  xmlns:android="Http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/rl_view"  android:layout_width="match_parent"  android:layout_height="wrap_content" >  <trunk.doi.base.ui.activity.test.HorizontalProgressbarWithProgress   android:id="@+id/progress_bar"      android:layout_marginTop="50dp"   android:padding="5dp"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:max="100"   android:progress="50"   app:progress_unreach_color="@color/pink"   app:progress_text_color="@color/yellow"   app:progress_reach_color="@color/red"   />  <android.support.v7.widget.AppCompatSeekBar   android:id="@+id/seekbar"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:padding="5dp"   android:layout_marginTop="100dp"   />  <trunk.doi.base.ui.activity.test.RoundProgressBarWithProgress   android:id="@+id/progress_bar2"      android:layout_marginTop="150dp"   android:padding="5dp"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:max="100"   android:progress="0"   app:progress_unreach_color="@color/pink"   app:progress_text_color="@color/yellow"   app:progress_reach_color="@color/red"   app:progress_reach_height="3dp"   app:progress_unreach_height="1dp"   app:radius="200dp"   /></RelativeLayout>

ViewMvActivity代码

import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.widget.AppCompatSeekBar;import android.view.MotionEvent;import android.view.View;import android.widget.RelativeLayout;import android.widget.SeekBar;import butterknife.BindView;import trunk.doi.base.R;import trunk.doi.base.base.BaseActivity;public class ViewMvActivity extends BaseActivity { //没有集成Butterknife的findviewbyid() @BindView(R.id.progress_bar) HorizontalProgressbarWithProgress progress_bar; @BindView(R.id.progress_bar2) RoundProgressBarWithProgress progress_bar2; @BindView(R.id.seekbar) AppCompatSeekBar seekbar; private float mTouchStartY; private static final float TOUCH_MOVE_MAX_Y=600; @Override protected int initLayoutId() {  return R.layout.activity_view_mv; } @Override protected void initView(@Nullable Bundle savedInstanceState) { } @Override protected void setListener() {  seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {   @Override   public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {    progress_bar.setProgress(progress);    progress_bar2.setProgress(progress);   }   @Override   public void onStartTrackingTouch(SeekBar seekBar) {   }   @Override   public void onStopTrackingTouch(SeekBar seekBar) {   }  }); } @Override protected void initData() { }}

上述就是小编为大家分享的Android中怎么实现一个炫酷进度条效果了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Android中怎么实现一个炫酷进度条效果

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

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

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

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

下载Word文档
猜你喜欢
  • Android中怎么实现一个炫酷进度条效果
    这期内容当中小编将会给大家带来有关Android中怎么实现一个炫酷进度条效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HorizontalProgressbarWithProgress的代码impor...
    99+
    2023-05-30
    android
  • 如何在HTML5中实现一个超炫酷粒子效果的进度条
    如何在HTML5中实现一个超炫酷粒子效果的进度条?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript代码  var lightL...
    99+
    2023-06-09
  • Android中怎么自定义ProgressBar实现酷炫进度条
    要在Android中自定义ProgressBar并实现酷炫的进度条效果,你可以按照以下步骤进行操作:1. 创建一个新的自定义Prog...
    99+
    2023-10-18
    Android
  • Qt实现炫酷启动图动态进度条效果
    目录一、简述二、动效进度条1、光效进度条2、延迟到达进度条3、接口说明三、启动图1、实现思路2、背景图切换四、测试1、构造启动图2、背景图3、其他信息4、事件循环五、源码一、简述 最...
    99+
    2024-04-02
  • Python如何实现酷炫进度条
    这篇文章主要介绍了Python如何实现酷炫进度条的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python如何实现酷炫进度条文章都会有所收获,下面我们一起来看看吧。1、自定义ProgressBar最原始的办法就...
    99+
    2023-06-30
  • C# 中怎么实现一个进度条效果
    本篇文章给大家分享的是有关C# 中怎么实现一个进度条效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C# 进度条效果实现实例源码:public class ...
    99+
    2023-06-17
  • C#中怎么实现一个进度条效果
    今天就跟大家聊聊有关C#中怎么实现一个进度条效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。using System;   using&nb...
    99+
    2023-06-17
  • AJAX中怎么实现一个进度条效果
    AJAX中怎么实现一个进度条效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 效果如下: 代码如...
    99+
    2024-04-02
  • shell 中怎么实现一个进度条效果
    本篇文章为大家展示了shell 中怎么实现一个进度条效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代码如下:#!/bin/bashCOUNTER=0_R=0_C=`tput cols`_PROC...
    99+
    2023-06-09
  • Android中怎么利用ImageSlider实现一个炫酷轮播广告效果
    这期内容当中小编将会给大家带来有关Android中怎么利用ImageSlider实现一个炫酷轮播广告效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. Gradle 依赖配置我们这里使用的是 andr...
    99+
    2023-05-30
    android imageslider
  • Android Studio怎么实现进度条效果
    小编给大家分享一下Android Studio怎么实现进度条效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Android是什么Android是一种基于Linu...
    99+
    2023-06-14
  • Android ProgressBar怎么实现进度条效果
    这篇文章主要介绍了Android ProgressBar怎么实现进度条效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android ProgressBar怎么实现进度条效果文章都会有所收...
    99+
    2023-06-30
  • Android Studio实现进度条效果
    本文实例为大家分享了Android Studio实现进度条效果的具体代码,供大家参考,具体内容如下 实验作业 要求一个进度条,进度随机 效果图 xml代码 <?x...
    99+
    2024-04-02
  • 怎么用HTML5的canvas实现一个炫酷时钟效果
    小编给大家分享一下怎么用HTML5的canvas实现一个炫酷时钟效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!对于H5来说,canvas可以说是它最有特色的一...
    99+
    2023-06-09
  • HTML5中Canvas如何实现酷炫大波浪进度图效果
    这篇文章主要介绍了HTML5中Canvas如何实现酷炫大波浪进度图效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解...
    99+
    2024-04-02
  • C#中怎么利用 WinForm实现一个进度条效果
    C#中怎么利用 WinForm实现一个进度条效果,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先是进度条窗体,需要在上面添加进度条,然后去掉ControlBox。除此外,还要...
    99+
    2023-06-17
  • Android实现蜗牛进度条效果
    友好的界面可以给用户留下深刻印象,为APP加分,今天实现的这个进度条,以蜗牛爬动的方式告诉用户当前进度,体验比较棒,这里分享一下。这里创建一组帧动画作为进度条的标志,如下:<?xml version="1.0" encodin...
    99+
    2023-05-31
    android 进度条 蜗牛
  • Android实现下载进度条效果
    目录最终效果和对比vivo商店效果分析1 - 计算进度分析2 - 绘制圆角矩形解决方案分析3 - 绘制文字和交汇手势拓展完整代码具体使用最终效果和对比vivo商店效果 vivo应用商...
    99+
    2024-04-02
  • 怎么在CSS3中实现一个酷炫的3D旋转透视效果
    本篇文章给大家分享的是有关怎么在CSS3中实现一个酷炫的3D旋转透视效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。CSS3 3D 转换的常用API介绍首先先上一张css 3...
    99+
    2023-06-08
  • C#中怎么利用异步实现一个进度条效果
    本篇文章给大家分享的是有关C#中怎么利用异步实现一个进度条效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#进度条实现之异步实例进度条页面://==============...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作