如何使用 Android Studio 在 Processing 中访问文件

How to access a file in Processing using Android Studio

我正在尝试 运行 在我的 android 应用程序中处理草图。 在此草图中,我需要访问位于 raw 目录中的 SVG 文件。 我不知道如何访问该文件,即使该文件位于目录 "data" 中,就像它在 Processing 中的工作方式一样,它也根本无法工作。检查此示例代码:

import processing.core.PApplet;
import processing.core.PShape;
import processing.core.PVector;

public class Menu extends PApplet {
    /**************************************************/
    //icon:
    PShape icon;

    /**************************************************/
    public void settings()
    {
        size(displayHeight, displayHeight);
    }
    /**************************************************/
    public void setup()
    {
        icon =  loadShape("menu.svg");  //here is where an error occurs;
    }
    /**************************************************/
    public void draw()
    {
        background(0);
    }
    /**************************************************/

更新

错误信息:

                                                                --------- 

beginning of crash
09-07 07:36:07.503 2939-2986/letalis.safr.com.letalis E/AndroidRuntime: FATAL EXCEPTION: Animation Thread
                                                                        Process: letalis.safr.com.letalis, PID: 2939
                                                                        java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String processing.data.XML.getString(java.lang.String)' on a null object reference
                                                                            at processing.core.PShapeSVG.<init>(Unknown Source)
                                                                            at processing.core.PShapeSVG.<init>(Unknown Source)
                                                                            at processing.core.PGraphicsAndroid2D.loadShape(Unknown Source)
                                                                            at processing.core.PApplet.loadShape(Unknown Source)
                                                                            at letalis.safr.com.letalis.Esquech_Menu.setup(Esquech_Menu.java:111)
                                                                            at processing.core.PApplet.handleDraw(Unknown Source)
                                                                            at processing.core.PSurfaceNone.callDraw(Unknown Source)
                                                                            at processing.core.PSurfaceNone$AnimationThread.run(Unknown Source)
09-07 07:36:07.578 2939-2952/letalis.safr.com.letalis W/EGL_emulation: eglSurfaceAttrib not implemented
09-07 07:36:07.578 2939-2952/letalis.safr.com.letalis W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xacb7f860, error=EGL_SUCCESS
09-07 07:36:07.592 2939-2952/letalis.safr.com.letalis E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaebf1150
09-07 07:36:07.734 2939-2952/letalis.safr.com.letalis W/EGL_emulation: eglSurfaceAttrib not implemented
09-07 07:36:07.735 2939-2952/letalis.safr.com.letalis W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xab2c9da0, error=EGL_SUCCESS
09-07 07:36:07.942 2939-2952/letalis.safr.com.letalis V/RenderScript: 0xa21fe000 Launching thread(s), CPUs 2
09-07 07:36:08.053 2939-2952/letalis.safr.com.letalis E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaebf1230

您可以将图像(或任何其他数据)存储在 sdcard、sqlite 数据库或 sharedpreferences 中。只有那些需要背景图片的文件才会打包在应用程序中。

当您尝试在不使用打开目录的情况下导入文件时,Processing sketch 会立即在项目文件夹中查找名为 "Data" 的文件夹。例如,如果您的项目保存在

C://processingSketch/

然后您使用代码导入的所有文件都包含
icon = loadShape("menu.svg");

icon = loadShape(dataPath("menu.svg"));

将在 C://processingSketch/Data 中搜索,如果不存在这样的 Data 文件夹,它将不起作用。

因此,要么在您的项目文件夹中创建 Data 文件夹并将 "menu.svg" 放在那里,要么在您的 Android 系统中找到该文件的打开目录并将其包含在代码中。

加载形状可能不是问题。您没有将 SVG 形状绘制到屏幕上。 menu.svg 应该位于 Menu.pde 所在项目的根目录下。请参阅下面的屏幕截图。我显示 svg 文件所在的位置。

import processing.core.PApplet;
import processing.core.PShape;
import processing.core.PVector;

public class Menu extends PApplet {
    /**************************************************/
    //icon:
    PShape icon;

    /**************************************************/
    public void settings()
    {
        size(400, 400);
    }
    /**************************************************/
    public void setup()
    {
        icon =  loadShape("Ghostscript_Tiger.svg"); 
    }
    /**************************************************/
    public void draw()
    {
        shape(icon, 50, 50, 300, 300);  // need to draw the shape you loaded
    }
    /**************************************************/
}