Processing on Android开发之旅——基础篇

最近受徒弟推荐,对可视化数据开始感兴趣。其中用到了一种叫做Processing的语言。

Processing是一种比较新的语言。曾经被作为“Java的替代语言”被众人关注。究其原理,是利用了Java作为整体语言的解释器,再通过一些技术手段能够让Processing语言的代码经过一些简短的修饰,变成Java源代码,再通过Java进行编译。

因为语法结构非常简洁,所以Processing被广泛用于艺术与交互类应用程序之中。Processing常用的有两个函数:setup()和draw()。setup()函数类似于其他各种语言的main函数,就是程序的入口,在程序初始化之后会被执行一次。draw()函数是一个定时回调函数(每秒执行60次)。搭配这两个函数将会很容易制作出一些包含迭代、交互、动画等等的程序。

由于Processing与Java几乎无异,所以在Java中也非常用以实现Processing的代码。但毕竟从Processing到Java原本需要一个修饰的过程,所以说在Android项目中使用Processing的内容还是有一些问题需要注意。

第一点就是作为一个Android平台的专业开发者,我们所利用的更多的是Processing的架构、丰富的函数以及setup和draw函数的这种思想,而不是Processing的全部语法。

第二点就是在Processing中一部分原生函数都需要经过程序员的一些转化。具体的转化方法可以在这两个地方查询:

  1. http://wiki.processing.org/w/Android
  2. http://processing.googlecode.com/svn/trunk/processing/build/javadoc/core/index.html

(注:第二条中的Javadoc是针对纯Java环境而不是Android环境所编写的。所以继承关系可能会有一些问题。所以建议大家直接查看源代码) 说了这么多,Processing on Android到底有何优势呢?那我就通过一个实例为大家展示如何在Android中利用Processing进行开发。相信大家耐心看完之后一定会明白的!

第一步是下载Processing(下载地址:http://www.processing.org/)

笔者所使用的是Mac OS Lion with Android SDK r16,其他系统的操作也类似。

第二步、在Eclipse中新建项目。 大家可以从截图中看到,我并没有使用向导创建Activity。具体什么原因可以在后面看到。 注意:Processing目前似乎只支持2.2(API Level 8)以上的版本。

第三步,将Processing-core包导入项目。 将图中android-core.zip直接修改后缀成.jar,得到的就是Processing-core包。

第四步,编写“PApplet” PApplet是所有Processing的入口程序。用户所编写的程序需要继承自这个PApplet类。并且需要自己编写setup()和draw()这两个函数以共回调。
程序的内容如下:

package cn.Friskit;  

import processing.core.*;  
public class ProcessingRun extends PApplet{  
    public void setup(){  
        strokeWeight(5);  
    }   
    public void draw(){  
        line(mouseX,mouseY,pmouseX,pmouseY);  
    }  
}  

上面这一段程序实现的功能类似于电子白板。通过手指在设备上的拖动进行绘画。 在传统的Android平台上想要实现类似的功能可是非常麻烦的!但是在Processing框架里头只用到了几行实际代码就能达到同样的效果。可见Processing对于交互与动画等方面的先天优势。。。

第五步,注册Activity 很明显,想要让系统运行这个程序,还需要将这个ProcessingRun在AndroidManifest.xml中注册。也就是在节点中添加以下内容:

<activity android:name=".ProcessingTest">  
    <intent-filter>  
        <action android:name="android.intent.action.MAIN"/>  
        <category android:name="android.intent.category.LAUNCHER"/>  
    </intent-filter>  
</activity>  

细心的读者肯定会为,这里添加的明明是一个Activity。但我们的ProcessingRun只是一个继承自PApplet的类。 在这里我们就需要剖析以下PApplet的结构了。 从Android版Processing中我们可以查到这些代码:

再通过分析PApplet的源代码能共很容易的发现,其实PApplet就是一个封装了很多功能的Activity。Processing也实现了OnCreate等等的函数为后续使用搭建了一个良好的框架。 所以说将一个继承自PApplet的类当成Activity注册到AndroidManifest.xml中也是没有问题的。

最后执行一下,效果跟咱们想象的差不多。 好了,这次的Processing on Android开发之旅就先写到这里。 现在Processing对Android的支持还不如对原生Java的支持好。甚至还没有已经成型的文档。但是我们可以通过阅读源代码来了解Processing究竟是如何工作的。好了,就先说这么多了,期待下一次的研究吧!

Friskit

继续阅读此作者的更多文章