问题
Hi. I want to create a 3dplot graph in android. I want to use jzy3d lib and found this example for beginning.
import org.jzy3d.chart.Chart;
import org.jzy3d.colors.Color;
import org.jzy3d.colors.ColorMapper;
import org.jzy3d.colors.colormaps.ColorMapRainbow;
import org.jzy3d.maths.Range;
import org.jzy3d.plot3d.builder.Builder;
import org.jzy3d.plot3d.builder.Mapper;
import org.jzy3d.plot3d.builder.concrete.OrthonormalGrid;
import org.jzy3d.plot3d.primitives.Shape;
import org.jzy3d.plot3d.rendering.canvas.Quality;
import org.jzy3d.ui.ChartLauncher;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Mapper mapper = new Mapper() {
public double f(double x, double y) {
return 10 * Math.sin(x / 10) * Math.cos(y / 20) * x;
}
};
// Define range and precision for the function to plot
Range range = new Range(-150, 150);
int steps = 50;
// Create a surface drawing that function
Shape surface = (Shape) Builder.buildOrthonormal(new OrthonormalGrid(range, steps, range, steps), mapper);
surface.setColorMapper(new ColorMapper(new ColorMapRainbow(), surface.getBounds().getZmin(), surface.getBounds().getZmax()));
surface.setFaceDisplayed(true);
surface.setWireframeDisplayed(false);
surface.setWireframeColor(Color.BLACK);
// Create a chart and add the surface
Chart chart = new Chart(Quality.Advanced);
chart.getScene().getGraph().add(surface);
ChartLauncher.openChart(chart);
}
but when I want to run it it gives this error message:
05-29 20:10:16.685: E/AndroidRuntime(20113): java.lang.NoClassDefFoundError: org.jzy3d.plot3d.rendering.canvas.CanvasAWT
and of course i add jzy3d , jogl , swt , gluegen libs to my project.
回答1:
AWT isn't supported under Android. Moreover, you use "jogl.jar" which comes from JOGL 1 whereas JOGL supports Android only since its second version. Please use a more recent version of Jzy3D and do the same for JOGL and GlueGen. As far as I know, Jzy3D 0.8 doesn't support Android.
回答2:
JOGL2, the underlying framework for Jzy3d 0.9.x rendering allows deploying on Android so Jzy3d will be able to do so.
For Android, there's a requirement to have no dependency on AWT, which is made feasable by ignoring the src/awt in jzy3d main library (ignoring swing and swt should be a good idea as well). Jzy3d has its own equivalents for AWT Rectangle & the likes so it will still build. You will have to derive CanvasNewtAwt [1] to make it work with Android (see [2] and [3]). You'll also want to see how maven poms select awt and swing source [4].
[1] http://doc.jzy3d.org/javadoc/0.9.1/jzy3d-api/org/jzy3d/plot3d/rendering/canvas/CanvasNewtAwt.html
[2] http://forum.jogamp.org/Migrate-a-Java-application-using-Jogl-to-Android-tablet-td3732586.html
[3] http://jogamp.org/jogl/doc/NEWT-Overview.html
[4] https://github.com/jzy3d/jzy3d-api/blob/master/jzy3d-api/pom.xml
来源:https://stackoverflow.com/questions/23938383/how-to-use-jzy3d-in-android-using-eclipse