Android 用 Path 画圆

2024-04-22

我正在尝试绘制一个圆圈的动画。在我的自定义视图中,我有

private final Paint mPaint = new Paint() {
    {
        setDither(true);
        setStyle(Paint.Style.STROKE);
        setStrokeCap(Paint.Cap.ROUND);
        setStrokeJoin(Paint.Join.ROUND);
        setColor(Color.BLUE);
        setStrokeWidth(30.0f);
        setAntiAlias(true);
    }
};
...
protected void onDraw(Canvas canvas) {
    super.onDraw();
    if (mOval == null) {
        mOval = new RectF(getLeft(), getTop(), getRight(), getBottom());
    }
    if (mPath == null) {
        mPath = new Path();
    mPath.moveTo(0, getHeight() / 2);
    }

    float sweepAngle = Math.min((float) mElapsedTime / 1000 * 60 * 1, 1) * 360;
    if (sweepAngle == 0) {
        mPath.reset();
    } else if (mCurrentAngle != sweepAngle) {
    mPath.arcTo(mOval, mCurrentAngle, sweepAngle);
    }
    mCurrentAngle = sweepAngle;
    canvas.drawPath(mPath, mPaint);
}

我会不定时更新mElapsedTime并打电话invalidate()。然而,屏幕上没有绘制任何内容。我尝试了几种变体,但没有成功。我做错了什么吗?有没有更简单的方法来做到这一点?给定圆的百分比,我希望能够使圆的大部分成为屏幕上绘制的内容。


这里有两件事:

  1. 你必须打电话canvas.drawOval(...)在将圆弧绘制到椭圆上之前。不然就不会显示出来。这就是为什么我的方法不起作用。

  2. Canvas has a drawArc需要起始角度和扫掠度数的方法。看Canvas.drawArc(RectF, float, float, boolean, Paint) https://developer.android.com/reference/android/graphics/Canvas.html#drawArc(android.graphics.RectF,%20float,%20float,%20boolean,%20android.graphics.Paint)。这就是我想要画圆圈的东西。

EDIT:这是我的相关代码View子类:

private final Paint mArcPaint = new Paint() {
    {
        setDither(true);
        setStyle(Paint.Style.STROKE);
        setStrokeCap(Paint.Cap.ROUND);
        setStrokeJoin(Paint.Join.ROUND);
        setColor(Color.BLUE);
        setStrokeWidth(40.0f);
        setAntiAlias(true);
    }
};

private final Paint mOvalPaint = new Paint() {
    {
        setStyle(Paint.Style.FILL);
        setColor(Color.TRANSPARENT);
    }
};

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    RectF mOval = new RectF(left, top, right, bottom); //This is the area you want to draw on
    float sweepAngle = 270; //Calculate how much of an angle you want to sweep out here
    canvas.drawOval(mOval, mOvalPaint); 
    canvas.drawArc(mOval, 269, sweepAngle, false, mArcPaint); //270 is vertical. I found that starting the arc from just slightly less than vertical makes it look better when the circle is almost complete.
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 用 Path 画圆 的相关文章

随机推荐

  • char 和初始化列表

    I d like to pass some numeric byte values via an initializer list a variadic template into an array Is that possible tem
  • Ember数据渲染有很多

    在我的 ember 应用程序中 我有一个模型 App Schedule DS Model extend manager DS belongsTo App Manager embedded true entries DS hasMany Ap
  • 异步运行 PHP 任务

    我正在开发一个较大的 Web 应用程序 后端主要是 PHP 代码中有几个地方我需要完成某些任务 但我不想让用户等待结果 例如 当创建一个新帐户时 我需要向他们发送一封欢迎电子邮件 但是 当他们点击 完成注册 按钮时 我不想让他们等到电子邮件
  • 重命名 Azure 存储表?

    是否无法重命名 Azure 存储表 我似乎无法在网上找到任何东西 甚至是 cmdlet Visual Studio Server Explorer Cloud Storage Studio 或 TableXplorer 中没有此选项 你是对
  • 如何删除 vscode 中这个烦人的 Push Changes 按钮?

    它以前不存在 由于某种原因它最近出现在我的 vscode 中 也许是在更新之后 那么有人知道如何删除这些按钮吗 Thanks 从 v1 69 开始 有新设定 https code visualstudio com updates v1 69
  • Git:忽略公共存储库的文件,但不忽略私有存储库的文件

    我正在通过 git 在 Heroku 上部署 Rails 应用程序 目前 并且还希望有一个公共版本供人们查看 有些文件是敏感的 只能在 heroku 分支中提交和推送 而不是在 public 分支中提交和推送 解决这个问题的最佳方法是什么
  • 如何手动验证 SAMLResponse 签名?

    鉴于以下 SAML 响应 我如何手动验证签名是否有效 我认为我应该依赖元数据中提供的 IDP 证书 而不是响应本身中的证书 尽管它们应该是相同的 有没有办法使用 openssl 或 xmlsec1 命令来执行此操作
  • 根据 C# 的属性之一从列表中删除重复的项目

    我有类型类别的列表 public class MyClass public SomeOtherClass classObj public string BillId public List
  • 在水晶报告中转义字符串中的双引号

    水晶报表函数中如何转义双引号 我的代码 Function GetResult Dim Result As String if the Result ckl B else end if 注意 我使用函数的基本语法 不需要写函数 简单的方法是
  • OpenCV 中的随机顺序洗牌 cv::Mat

    里面没有函数吗OpenCV随机打乱矩阵 按行排序 Input 1 2 3 4 5 6 7 8 9 Output 4 5 6 7 8 9 1 2 3 cv randShuffle 函数似乎只是对整个数组中的元素进行随机排序 我正在使用较新的
  • MySQL 困难 - 平假名和片假名被视为相同

    我试图在 mysql 数据库上获取 su SELECT FROM edict WHERE japanese su 然而我得到了 3 个结果 斯 斯 我尝试使用 作为查询 它也返回相同的结果 SELECT FROM edict WHERE j
  • WinRT 有垃圾收集吗?

    WinRT 有垃圾收集吗 或者它是否像 COM 一样进行引用计数 I found 本文 http www itwriting com blog 4866 a few facts about microsofts new windows ru
  • 如何在将图像上传到 Firebase 之前调整图像大小?

    我之前看到过这个问题 但没有一个解决方案真正适合我的情况 除了节省一些空间之外 我还想节省从 Firebase 存储上传 下载内容的时间 由于 firebase 使用图像 uri 我想不出实现此目的的正确方法 解决方案可能是创建一个 副本
  • window.location 和 document.location 有什么区别?

    window location 和 document location 有什么区别 它们都应该引用同一个对象吗 根据 W3C 的说法 它们是相同的 实际上 为了跨浏览器安全 您应该使用window location而不是document l
  • NSFetchedResultsController 并不总是为 NSFetchedResultsChangeMove 调用 didChangeObject:atIndexPath:forChangeType:newIndexPath:

    我在用着NSFetchedResultsController with sortDescriptors请求在其中填充大量结果的表 我注意到 当发生更改将行从表格底部附近移动到顶部时 didChangeObject atIndexPath f
  • 使用 Modernizr 检测移动设备的最可靠方法是什么?

    我正在开发一个响应式网站 当用户在移动设备上浏览时 我被要求将我们网站上的任何免费电话号码交换为固定电话号码 检测用户是否在使用 Modernizr 库 或任何其他库 的移动设备上最可靠的方法是什么 我知道 Modernizr touch
  • 推送被拒绝,未能检测到 set buildpack heroku/php

    我正在尝试将我的 php 应用程序从 github 部署到 heroku 但它不起作用 我有将 php 应用程序部署到 heroku 的经验 但由于某种原因 这次我遇到了麻烦 这就是我所做的 在heroku中创建了一个应用程序 将我的 gi
  • 在 IDEA 中运行 Spark on Hive 项目期间创建事务连接工厂时出错

    我正在尝试为 Spark Streaming 项目设置一个开发环境 该项目需要将数据写入 Hive 我有一个包含 1 个主设备 2 个从设备和 1 台开发机器的集群 在 Intellij Idea 14 中编码 在 Spark shell
  • 如何从运行的应用程序中获取nodejs的源代码

    我不小心删除了nodejs应用程序的源代码 但该应用程序正在运行 那么如何从运行的应用程序中获取源代码 我希望源代码已缓存在某个目录中 我能够通过附加调试器来恢复完整文件 如TGrif https stackoverflow com use
  • Android 用 Path 画圆

    我正在尝试绘制一个圆圈的动画 在我的自定义视图中 我有 private final Paint mPaint new Paint setDither true setStyle Paint Style STROKE setStrokeCap