【问题标题】:Reference vector paths in code?代码中的参考向量路径?
【发布时间】:2016-01-15 18:02:26
【问题描述】:

我有一个飞镖板的 SVG 图像,我最近使用矢量资产工作室将其转换为矢量。我正在尝试复制 here 显示的这个飞镖板的功能。

我遇到的唯一问题是尝试将点击侦听器复制到板的某些部分,因为它只是一张图片。我尝试研究将矢量或图像视图拆分为 div 并引用 .XML 文件中的名称,但没有任何结果。是否可以在代码中引用矢量路径并在实现 onclick 侦听器时显示路径名称(IE s19)?或者有什么不同的方法来解决这个问题?

dartboard.xml 的结构:

<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="300dp"
android:height="300dp"
android:viewportHeight="774.0"
android:viewportWidth="787.0">
<group android:name="singles">
    <path
        android:name="s19"
        android:fillColor="#F7E9CD"
        android:pathData="M328,561.9c-2,-0.8 -3.9,-1.7 -5.8,-2.6l66.1,-138.9c2,0.8 4.2,1.5 6.4,1.9L374.7,574.8C358.6,572.6 343,568.3 327.9,561.9zM358.7,696.9l13.4,-102.2c-17.8,-2.5 -35.2,-7.3 -51.9,-14.3c-2.2,-0.9 -4.4,-1.9 -6.6,-2.9l-44.3,93.1c3.6,1.7 7.2,3.3 10.8,4.8C305.3,686.1 331.7,693.3 358.7,696.9z"/>
    <path
        android:name="s14"
        android:fillColor="#FF000000"
        android:pathData="M215.2,362.7c2.2,-16.1 6.6,-31.7 12.9,-46.7c0.8,-2 1.7,-3.9 2.6,-5.8l138.9,66.1c-0.8,2 -1.5,4.2 -1.9,6.4L215.2,362.7zM93.1,346.7l102.2,13.4c2.5,-17.8 7.3,-35.2 14.3,-51.9c0.9,-2.2 1.9,-4.4 2.9,-6.6l-93.1,-44.3c-1.7,3.6 -3.3,7.2 -4.8,10.8C103.9,293.3 96.7,319.7 93.1,346.7z"/>

我的游戏活动:

<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.blue.darts.GameActivity">

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    android:src="@drawable/dartboard"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"/>
</RelativeLayout>

【问题讨论】:

    标签: android svg onclicklistener vector-graphics xml-drawable


    【解决方案1】:

    对于任何可能遇到此问题的人,似乎无法从矢量资产工作室创建的矢量中引用任何内容。您最好的选择是使用WebView 并通过将其转换为 HTML 来显示 SVG。从那里,您可以随意操作本地 HTML。

    【讨论】:

      【解决方案2】:

      如果我对 OP 的理解正确,您需要直接访问静态资源的路径信息。 Android 的资源非常适合创建机器可读的静态资源,但在此过程中它们变得相当不透明。我建议您将 SVG 文件直接翻译成代码。有一些工具,例如almosr/android-svg-code-render,可以帮助您实现这一目标。拥有Path 对象后,您可以使用Path#op 进行相交并使用Path#isEmpty 测试命中。

      虽然没有直接关系,但也有PathMeasure可以用来追踪路径。

      我引用的项目没有构建说明,所以这就是我所做的,YMMV:

      git clone https://github.com/almosr/android-svg-code-render.git
      cd android-svg-code-render
      curl -O http://central.maven.org/maven2/com/caverock/androidsvg/1.2.1/androidsvg-1.2.1.jar
      mkdir classes
      javac -cp androidsvg-1.2.1.jar -sourcepath src -d classes src/android_svg_code_render/Main.java
      jar cvfm android-svg-code-render src/META-INF/MANIFEST.MF -C classes .
      java -jar android-svg-code-render input.svg -o output.java
      

      然后我可以从output.java 获取代码,并按照我的方式处理它...生成的代码并不漂亮,但它可以工作!

      【讨论】:

        【解决方案3】:

        为此,我可以在代码中引用 SVG 的各个部分,我将这些 svg 保存在资产中并使用 [https://github.com/BigBadaboom/androidsvg]

        [java svg解析代码]

        当用户点击 svg 中的某个部分时,我只是将一些内部类公开并在列表中保存 svg xml 解析对象使用点击了 svg 部分的触摸坐标

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-09
          • 1970-01-01
          • 1970-01-01
          • 2016-05-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多