【问题标题】:How Can I Draw an Arc in Android XML?如何在 Android XML 中绘制圆弧?
【发布时间】:2020-03-10 21:27:04
【问题描述】:

我想将弧线绘制为 Android XML 对象。我需要它是 xml,而不是 Drawable 我可以通过编程方式编码(这太容易了!)因为我需要它作为通知图标。

我知道如何对圆和环进行编码,并且我可以在矩形上使用半径来获得四分之一/半圆。但是,我不知道如何在 xml 中编写任何弧(例如 30 度)。有可能吗?

【问题讨论】:

  • 你不能这样做,xml drawables 不是绘制任何东西的一般方法:只支持简单的形状 - 如果你需要更复杂的绘图,你必须在 java 中这样做 - 见android.graphics.drawable.shapes.Shape class

标签: android xml


【解决方案1】:

XML 仍然是 Drawable 资源,而 SVG 在其中被称为 vectorpath。您可以使用任何工具来创建矢量路径,然后可以将其用作pathData。此类文件的正确位置是src/main/res/drawable-nodpi,这是一个示例path(可以将其中几个放入这样的vector):

<?xml version="1.0" encoding="utf-8"?>
<vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="500.0"
    android:viewportHeight="500.0"
    android:width="50dp"
    android:height="50dp">

    <path
        android:fillColor="@color/colorAccent"
        android:pathData="M 250 250 A 100 100 0 0 0 450 250 Z"/>

</vector>

实际知道“如何画弧线”(用上面路径的值):

同时,Android Studio 甚至为此提供了一个“预览”选项卡:

【讨论】:

  • 嗨,我对向量不是很熟悉。那会不会导致它看起来不平滑,因为它只是从一点到另一点的线条?另外,你怎么会得到一个弧(空心,像一个环的 1/8)而不是一个实心的半圆或什么的?
  • @Elliptica 上面截图中的预览是否显得“不流畅”?如果有任何“不平滑”的东西,那么这些是光栅化图形,如 PNG、BMP、GIF、WEBP,超过其默认的 100% 缩放(其原始大小);而矢量图形可以在任何尺寸下完美缩放。这称为Bézier curve(或工具),例如。在 Photoshop、Illustrator、GIMP、InkScape 中。只有相当旧的 Android 版本需要使用支持库(自动)将它们呈现为 PNG。
  • @Elliptica 和最简单的,例如。当必须创建 1/8 切片时,使用设计应用程序调整路径,然后保存到 SVG,用文本编辑器再次打开,然后将 path 粘贴到 pathData(因为 Android Studio 有Drawable 预览,但不是 Bézier 工具)。一个 1/8 的切片需要水平线中间的一个坐标,而外侧的两个点位于稍微低一点的位置,以便成形。
  • 这不是一个 are 而是 hemicycle
【解决方案2】:

对我来说,解决方案非常简单。我不得不使用 Figma 来创建 Arc。

注意:你是否有使用 Figma 或任何设计工具的经验并不重要。这是一个非常简单直接的过程,只需不到 5 分钟即可完成。


现在,让我们开始吧……

  • 第一步是download the Figma Desktop app,画一个圆弧。 This short video 差不多总结了怎么画圆弧。

  • 第二步是将弧导出为 SVG 文件。同样,这是一个简单的过程,this 51-second video 总结了这个过程。

  • 最后一步是将 SVG 文件添加到 Android Studio。为此,请转到 File > New >Vector Asset,然后在弹出的菜单中选择 Local File。总而言之,您应该会看到如下所示的菜单。请注意,我的 SVG 本地文件的名称是 arc.svg。

【讨论】:

  • 嗨塔斯利姆。只是一个简短的说明:不需要添加“希望这有帮助”、“快乐编码”或其他闲聊材料。 Stack Overflow 旨在成为一个精选的问答集合,它更接近于文档而不是聊天室。如果可以的话,请尽量坚持技术写作。谢谢!
【解决方案3】:

弧形就像一个四分之一圆。因此,您需要绘制矩形形状以形成弧线。 下面的代码是使用矩形绘制圆弧:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:height="15dp" android:width="15dp"/>
<solid android:color="@color/darkGray"/>
<corners android:topRightRadius="0dp" android:bottomRightRadius="15dp"/>
</shape>

【讨论】:

  • 嗨,这实际上是我说我知道该怎么做的部分。我可以做四分之一圈和半圈。但是如果我想要一个 1/8 的圆圈或其他东西怎么办?
  • 那么你应该使用画布来绘制弧线。以下链接将为您提供帮助:android-coding.blogspot.com/2012/04/…
  • 弧不是“就像四分之一圆”。弧线是一条曲线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多