简单仿写网易加载进度条

2024-08-31 22:58

本文主要是介绍简单仿写网易加载进度条,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里写图片描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.safly.myapplication.MainActivity"><com.safly.myapplication.CustomeWaitingProgressBar
        android:layout_centerInParent="true"android:id="@+id/skipView2"android:layout_width="wrap_content"android:layout_height="wrap_content"></com.safly.myapplication.CustomeWaitingProgressBar></RelativeLayout>

MainActivity

package com.safly.myapplication;import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;import com.safly.myapplication.CustomeWaitingProgressBar;public class MainActivity extends AppCompatActivity {private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 2:pbBar.setWaitingProgress();break;}}};CustomeWaitingProgressBar pbBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pbBar = (CustomeWaitingProgressBar) findViewById(R.id.skipView2);new Thread(new Runnable() {@Overridepublic void run() {try {for (int i = 0; i < 100; i++) {Log.i("MainActivity","----------------");handler.sendEmptyMessage(2);Thread.sleep(100);}} catch (InterruptedException e) {e.printStackTrace();}}}).start();pbBar.setDegreeCallBack(new CustomeWaitingProgressBar.DegreeCallBack() {@Overridepublic void degreeFinish(int cur) {Toast.makeText(MainActivity.this,"cur--"+cur,Toast.LENGTH_SHORT).show();}});pbBar.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this,"setOnClickListener",Toast.LENGTH_SHORT).show();}});}
}

CustomeWaitingProgressBar

package com.safly.myapplication;import android.content.Context;  import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.RectF;import android.util.AttributeSet;  import android.view.View;  public class CustomeWaitingProgressBar extends View {private Paint mForePaint;private float mStrokeWidth;private float mRadius;private RectF mRect;  private int mWidth;private int mHeight;private int currentDegree;public CustomeWaitingProgressBar(Context context) {super(context);  init();}  public CustomeWaitingProgressBar(Context context, AttributeSet attrs) {  super(context, attrs);  init();}  public CustomeWaitingProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  init();}  private void init(){mRadius = DisplayUtil.dip2px(getContext(),20);mStrokeWidth = DisplayUtil.dip2px(getContext(),2);if(mForePaint == null){mForePaint=new Paint();mForePaint.setColor(Color.parseColor("#FF0000"));mForePaint.setAntiAlias(true);mForePaint.setStyle(Paint.Style.STROKE);mForePaint.setStrokeWidth(mStrokeWidth);}}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  super.onMeasure(widthMeasureSpec, heightMeasureSpec);  mWidth=getRealSize(widthMeasureSpec);  mHeight=getRealSize(heightMeasureSpec);  setMeasuredDimension(mWidth,mHeight);  }  public int getRealSize(int measureSpec){  int result=-1;  int mode=MeasureSpec.getMode(measureSpec);  int size=MeasureSpec.getSize(measureSpec);  if (mode==MeasureSpec.AT_MOST||mode==MeasureSpec.UNSPECIFIED){  //(半径*2+描边*2)的长度  result=(int) (mRadius*2+2*mStrokeWidth);  }else{  result=size;  }  return result;  }/*** 初始化yuanx的外轮廓矩形*/public void initRect(){if (mRect==null){mRect=new RectF();int left=(int) mStrokeWidth/2;int top=(int) mStrokeWidth/2;int right=mWidth-left;int bottom=mHeight-top;mRect.set(left,top,right,bottom);}}private int leftLastX = -90;private int sweepGreed  = 0;private int perAcceleration = 10;private int perDrawAcceleration = 5;private int drawTime;private int leftLastSweepGreed;@Overrideprotected void onDraw(Canvas canvas) {initRect();if (sweepGreed - leftLastSweepGreed >= 120){leftLastX = -90;sweepGreed = -90;drawTime = 0;}canvas.drawArc(mRect,leftLastX,sweepGreed,false,mForePaint);leftLastSweepGreed = perAcceleration*drawTime;leftLastX+=perAcceleration;sweepGreed+=perAcceleration+perDrawAcceleration*drawTime;drawTime++;if (currentDegree == 360){if (callBack!=null){callBack.degreeFinish(currentDegree);}}}DegreeCallBack callBack;public void setDegreeCallBack(DegreeCallBack callBack){this.callBack = callBack;}interface DegreeCallBack{void degreeFinish(int cur);}public void setWaitingProgress(){invalidate();}}  

这篇关于简单仿写网易加载进度条的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125231

相关文章

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1