科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件J2ME移动2D图形开发快速入门

J2ME移动2D图形开发快速入门

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 这篇文章将介绍可升级2D矢量图形API(Scalable 2D Vector Graphics API),它是J2ME的一个可选包。

作者:mydeman编译 来源:j2me开发网 2007年11月21日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
直接渲染2D内容

  如果你想除了你的SVG图像在哪里和怎样被渲染外获得完全的控制,你可以使用ScalableGraphics类直接绘制一个ScalableImage到Graphics对象之上,这个Graphics对象被传递到Canvas、Layer或者CustomItem实例的paint()方法中。

  你通过调用ScalableGraphics的静态createInstance()方法创建一个它的实例。在绘制之前,你必须首先使用bindTarget()方法将ScalableGraphics实例和传递到绘制方法中的Graphics对象绑定。在完成以后,请调用releaseTarget()。一旦建立绑定,你就可以使用render()方法绘制你的每一个图像。

  这个例子以不同的大小重复绘制“brave world”图像,例子通过在每一次调用render()方法前调用setViewportHeight()和setViewportWidth()方法改变图像大小:

private static class M2GCanvas extends Canvas
{
    // retain a reference the specified image
    ScalableImage scalableImage;
    
    // retain an instance of a scalable graphics
    ScalableGraphics scalableGraphics;
   
    public M2GCanvas( ScalableImage inImage )
    {
        scalableImage = inImage;

        // create the scalable graphics instance
        scalableGraphics = ScalableGraphics.createInstance();
    }

    public void paint( Graphics g )
    {
        // clear the display
        g.setColor( 255, 255, 255 );
        g.fillRect( 0, 0, getWidth(), getHeight() );
       
        // bind our scalable graphics to the given graphics
        scalableGraphics.bindTarget( g );

        // render at fixed position and size
        scalableImage.setViewportWidth( 50 );
        scalableImage.setViewportHeight( 75 );
        scalableGraphics.render( 5, 50, scalableImage );

        // again at different position and size
        scalableImage.setViewportWidth( 100 );
        scalableImage.setViewportHeight( 150 );
        scalableGraphics.render( 80, 5, scalableImage );

        // again at size that varies with the canvas size
        scalableImage.setViewportWidth( getWidth()-20 );
        scalableImage.setViewportHeight( getHeight()-20 );
        scalableGraphics.render( 0, 0, scalableImage );

        // release the graphics context
        scalableGraphics.releaseTarget();
    }
}

  Canvas的子类在不同的位置以不同的大小显示这个图像三次。在第三次,图像填满了这个画布。在支持可重设屏幕大小的设备上,图像可以适当的等比例变化。图4显示了画布的效果。在这个实现中,较大的图像在窗口大小被重置时等比例得到。

 在一个Canvas上等比例变换ScalableImages
图4 在一个Canvas上等比例变换ScalableImages

  如果你正在渲染的图像是动态的,你应该允许用户和他们交互。当你不用SVGAnimator渲染时,你需要检测用户指针事件,得到图像是否和在何处被点击,然后在SVGImage上调用dispatchMouseEvent()方法,触发脚本定义好的动作。对一个CustomItem,表单移动应该允许激活和焦点导航,通过图像中的元素,分别使用SVGImage的activate() 和focusOn()方法。

  你的程序不仅仅可以操纵一个已经存在的SVGImage的DOM,也可以从头建立一个图像。SVGImage的静态方法createEmptyImage()返回一个具有空文档的图像,这个文档的架构可以有程序创建的代表形状和变换的SVGElement填充。这种可以和ScalableGraphics联合使用,实现一个普通的2D绘制工具箱,但是正像我前面提到的那样,这样用法不是最初的意向,不推荐使用。

  总结


  J2ME的可升级2D矢量图形API提供了渲染和操作以矢量为基础的图像和动画的能力。矢量图像的占用空间小和伸缩性好使得它天生的适合移动应用程序。JSR-226的移动2D图形API使应用程序能够使用MIDP和AWT工具箱创建、显示和修改SVG内容。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章