如何使用 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
}
/**************************************************/
}
我正在尝试 运行 在我的 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
}
/**************************************************/
}