【问题标题】:SVG alter path without animation?SVG在没有动画的情况下改变路径?
【发布时间】:2018-06-20 15:54:51
【问题描述】:

我有一个电池图标,我想“动画化”,更改填充路径的长度以指示电池百分比。但是,SVG 和 SVG 动画的 android 文档表明您只能通过 xml 添加预定义的动画。有没有办法简单地改变 SVG 的路径并重新绘制它?

SVG.setPath("new path")?

我能想到的唯一其他选择是为图标的“丰满度”制作单独的动画(10%、20%、30% 等),但这似乎很乏味。

【问题讨论】:

  • 为此,您需要创建自定义 SVG 类
  • 我将如何继续更改自定义类中的路径?例如,假设我们可以从 ImageView 中获取 Drawable..
  • 您真的在使用 SVG 吗?还是您真的是指 VectorDrawable?您现在如何显示电池图标?
  • 通过 Vector Asset 向导导入,保存为 ic_battery.xml。我可以在一个活动中以 Drawable(或 VectorDrawable)的形式获取它。我知道要编辑的路径和坐标,所以我想在运行时“更改 xml”,然后重新渲染图像。例如,默认 svg 的路径长度为 0 表示电池充满,然后我以编程方式将其设置为长度 50 表示 50% 充满。为此,我只需要能够更改路径,不一定要对其进行动画处理。

标签: android android-layout animation svg drawable


【解决方案1】:

我认为this 是您需要的库。请试一试。这是一个非常新的图书馆。我自己没有尝试过。使用前请阅读自述文件或库问题。

【讨论】:

  • 这个库不合适,因为我只需要改变路径并重新绘制它,而不是动画它。
  • 为此,您必须在 java 中获取 SVG
  • 我该怎么做呢?我只能在活动类中访问 Drawable 或 VectorDrawable。
  • 这是你能做的我已经看到了一个图书馆。
  • 你为什么不使用Java简单的绘画。
【解决方案2】:

您可以创建CustomView 并覆盖onDraw。在此方法中,您调用 canvas.drawPath 并传递一个 Path 实例。该对象应在onCreate 中创建并用您的路径数据“填充”。需要understand the SVG/VectorDrawable path,找到Path类对应的方法。您还必须添加一个比例变量以使其大小可变。在您的布局 XML 中,您可以设置所需的大小。

public class CustomView extends View {
    Paint paint;
    Path path;

    public CustomView(Context context) {
        super(context);
        paint = new Paint();
        paint.setColor(Color.RED);
        path = // construct your path using Path methods
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawPath(path, paint);
    }
}

为了使电池填充状态增大或缩小,当然,您必须添加更多逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 2021-12-29
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2020-07-24
    相关资源
    最近更新 更多