简单仿写网易加载进度条

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

相关文章

利用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 固件。很多时候,我们也

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要