我的编程空间,编程开发者的网络收藏夹

Android自定义View实现圆环交替效果

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android自定义View实现圆环交替效果

下面请先看效果图:

  

看上去是不很炫的样子,它的实现上也不是很复杂,重点在与

onDraw()
方法的绘制。

首先是我们的attrs文件:


<?xml version="1.0" encoding="utf-8"?>
<resources>
 <attr name="firstColor" format="color"/>
 <attr name="secondColor" format="color"/>
 <attr name="circleWidth" format="dimension"/>
 <attr name="speed" format="integer"/>
 <declare-styleable name="CustomView">
  <attr name="firstColor" />
  <attr name="secondColor" />
  <attr name="circleWidth" />
  <attr name="speed" />
 </declare-styleable>
</resources>

接下来是我们重写

View
类的自定义
View
类:


public class MySelfCircleView extends View {
 
 int firstColor;
 
 int secondColor;
 
 int circleWidth;
 
 int speed;
 
 Paint mPaint;
 
 int mProgress;
 
 boolean isNext;
 public MySelfCircleView(Context context, AttributeSet attrs,
   int defStyleAttr) {
  super(context, attrs, defStyleAttr); 
  TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0);
  int n = typedArray.getIndexCount();
  for(int i=0; i<n; i++){
   int attr = typedArray.getIndex(i);
   switch (attr) {
    case R.styleable.CustomView_firstColor:
     firstColor = typedArray.getColor(attr, Color.RED);
     break;
    case R.styleable.CustomView_secondColor:
     secondColor = typedArray.getColor(attr, Color.RED);
     break;
    case R.styleable.CustomView_circleWidth:
     circleWidth = typedArray.getDimensionPixelSize(attr, (int) TypedValue.applyDimension( 
       TypedValue.COMPLEX_UNIT_PX, 20, getResources().getDisplayMetrics())); 
     break;
    case R.styleable.CustomView_speed:
     speed = typedArray.getInt(attr, 20);
     break;
   }
  }
  typedArray.recycle();
  mPaint = new Paint();
  new Thread(new Runnable() {
   @Override
   public void run() {
    while (true) {
     mProgress++;
     if (mProgress == 360) { 
      mProgress = 0; 
      if (!isNext) 
       isNext = true; 
      else 
       isNext = false; 
     } 
     postInvalidate(); 
     try { 
      Thread.sleep(speed); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    }
   }
  }).start();
 }
 public MySelfCircleView(Context context, AttributeSet attrs) {
  this(context, attrs, 0);
 }
 public MySelfCircleView(Context context) {
  this(context, null);
 }
 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  int centre = getWidth() / 2; // 获取圆心的x坐标 
  int radius = centre - circleWidth / 2;// 半径 
  mPaint.setStrokeWidth(circleWidth); // 设置圆环的宽度 
  mPaint.setAntiAlias(true); // 消除锯齿 
  mPaint.setStyle(Paint.Style.STROKE); // 设置空心 
  RectF oval = new RectF(centre - radius, centre - radius, centre + radius, centre + radius); // 用于定义的圆弧的形状和大小的界限 
  if (!isNext) {// 第一颜色的圈完整,第二颜色跑 
   mPaint.setColor(firstColor); // 设置圆环的颜色 
   canvas.drawCircle(centre, centre, radius, mPaint); // 画出圆环 
   mPaint.setColor(secondColor); // 设置圆环的颜色 
   canvas.drawArc(oval, -90, mProgress, false, mPaint); // 根据进度画圆弧 
  } else { 
   mPaint.setColor(secondColor); // 设置圆环的颜色 
   canvas.drawCircle(centre, centre, radius, mPaint); // 画出圆环 
   mPaint.setColor(firstColor); // 设置圆环的颜色 
   canvas.drawArc(oval, -90, mProgress, false, mPaint); // 根据进度画圆弧 
  }
 }
}

最后是我们的布局文件:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:zhy="http://schemas.android.com/apk/res/com.example.myselfview"
 android:layout_width="match_parent"
 android:layout_height="match_parent" >
 <com.example.myselfview.view.MySelfCircleView 
  android:layout_width="120dp"
  android:layout_height="120dp"
  android:layout_marginTop="20dp"
  android:layout_alignParentTop="true"
  android:layout_centerHorizontal="true"
  zhy:circleWidth="15dp"
  zhy:firstColor="#D4F668"
  zhy:secondColor="#2F9DD2"
  zhy:speed="10" /> 
 <com.example.myselfview.view.MySelfCircleView 
  android:layout_width="200dp"
  android:layout_height="200dp"
  android:layout_alignParentBottom="true"
  android:layout_centerHorizontal="true"
  zhy:circleWidth="24dp"
  android:layout_marginBottom="40dp"
  zhy:firstColor="#16A3FA"
  zhy:secondColor="#D20F02"
  zhy:speed="5" /> 
</RelativeLayout>

总结

好了,到这里我们的效果就算大工告成,感兴趣的朋友可以写写看,个人感觉自定义View需要大量的练习,才能为我所用。希望本文对大家开发Android能有所帮助。

您可能感兴趣的文章:android自定义View实现圆环颜色选择器利用Android模仿微信摄像圆环进度效果实例Android自定义带动画的半圆环型进度效果Android自定义view绘制圆环占比动画Android实现动态圆环的图片头像控件Android中自定义View实现圆环等待及相关的音量调节效果Android自定义View之酷炫圆环(二)Android自定义View之酷炫数字圆环Android开发笔记之:在ImageView上绘制圆环的实现方法Android实现光点模糊渐变的自旋转圆环特效


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android自定义View实现圆环交替效果

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

下载Word文档

猜你喜欢

Android自定义View实现圆环交替效果

下面请先看效果图:看上去是不很炫的样子,它的实现上也不是很复杂,重点在与onDraw()方法的绘制。 首先是我们的attrs文件:
2022-06-06

Android如何自定义view实现半圆环效果

小编给大家分享一下Android如何自定义view实现半圆环效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下1.自定义属性
2023-06-29

Android如何实现自定义view画圆效果

这篇文章主要介绍了Android如何实现自定义view画圆效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。看图代码:package sjx.com.custonview;i
2023-05-30

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

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

Android自定义View实现简单的圆形Progress效果

先给大家展示下效果图,如果感觉不错,请参考实现思路:我们要实现一个自定义的再一个圆形中绘制一个弧形的自定义View,思路是这样的:先要创建一个类ProgressView,继承自View类,然后重写其中的两个构造方法,一个是一个参数的,一个是
2022-06-06

Android怎么自定义View实现圆弧进度效果

这篇文章主要介绍“Android怎么自定义View实现圆弧进度效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么自定义View实现圆弧进度效果”文章能帮助大家解决问题。技术实现1.
2023-07-06

android 自定义圆角button效果的实例代码(自定义view Demo)

概述 在平时开发过程中经常会碰到需要使用圆角button的情况,一般也会包括很多其他小功能,比如要在里面添加img,设置不同的圆角大小等。针对这样的场景,直接使用创建多个shape,定义多个xml文件也是可以实现的。但是如果使用非常频繁,那
2022-06-06

android自定义view实现钟表效果

本文实例为大家分享了android view实现钟表的具体代码,供大家参考,具体内容如下 先看效果图:自定义view大家肯定已经不陌生了,所以直接今天直接步入正题:如何利用canvas去绘制出一个钟表 当然绘制之前我们必须进行测量(重写on
2022-06-06

Android自定义Drawable实现圆角效果

Drawable是一种可绘制资源的载体,如图形、图像等。在实际开发中可以作为view的背景。主要有静态和动态两种方式,静态通过xml描述使用,动态即自定义Drawable。本文实现一个圆形和圆角的背景图片效果。效果图:实现方式:1.初始化一
2023-05-30

Android之自定义View实现带4圆角或者2圆角的效果

1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 2) 实现view上2圆角我们只需要把左边的图嵌入到右边里面去,最终显示左边的图
2022-06-06

Android中自定义View实现圆环等待及相关的音量调节效果

圆环交替、等待效果效果就这样,分析了一下,大概有这几个属性,两个颜色,一个速度,一个圆环的宽度。 自定View的几个步骤: 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 3、重写onMesure 4、重写on
2022-06-06

Android自定义View实现折线图效果

下面就是结果图(每种状态用一个表情图片表示):一、主页面的布局文件如下:
2022-06-06

Android中怎么通过自定义View实现圆形切图效果

本篇文章给大家分享的是有关Android中怎么通过自定义View实现圆形切图效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现思路使用一个Paint,将得到的Bitmap设
2023-05-30

Android自定义View实现水波纹效果

介绍:水波纹散开效果的控件在 App 里面还是比较常见的,例如 网易云音乐歌曲识别,附近搜索场景。看下实现的效果:实现思路: 先将最大圆半径与最小圆半径间距分成几等份,从内到外,Paint 透明度依次递减,绘制出同心圆,然后不断的改变这些同
2023-05-30

Android自定义Animation实现View摇摆效果

使用自定义Animation,实现View的左右摇摆效果,如图所示:代码很简单,直接上源码 activity_maini.xml布局文件:
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录