简单仿写网易加载进度条

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

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也