`
txf2004
  • 浏览: 7039619 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SVG(JSR 266)开发入门指南

阅读更多

该文章转载自J2ME开发网,本文版权归原作者和J2MEDEV所有。
SonyEricsson的W950 M600和P990是基于Symbian平台的手机,并且手机上实现的是Symbian Java Platform 3。在SJP-3中提供了对Scalable Vector Graphics的支持,本文说明如何从文件中装载生成SVG Image以及如何在代码中创建SVG Image。

下面是用于创建SVG Image的文件svgImage.svg。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG Tiny 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">

<svg width="240" height="220" version="1.1" xmlns="http://www.w3.org/2000/svg" baseProfile="tiny">
<circle id="circle" cx="75" cy="75" r="25" fill="#C8C800" fill-opacity="0.5" stroke="#000000" stroke-width="5.0"/>
<rect id="rect" x="75" y="75" width="50" height="50" fill="#640000" fill-opacity="0.5" stroke="#000000" stroke-width="5.0" />

</svg>

在这个文件中我们会创建一个圆和一个矩形,信息如下。
Circle:
Id = Circle // id用来标记这个圆,这样可以在
cx = 75 // 原点 X
cy = 75 // 原点 Y
r = 25 // 半径
fill = C8C800 // 填充色
fill-opacity = 0.5 // 50% 透明度
stroke = black // border的颜色
stroke-witdh = 5 // Border的宽度

下面的代码说明了如何在MIDlet中载入上面的文件

private SVGImage svgImage = null;
private ScalableGraphics gc;
...
InputStream is = getClass().getResourceAsStream("/svgImage.svg");
svgImage = (SVGImage) SVGImage.createImage(is, null);
public void paint(Graphics g){
gc.bindTarget(g);
gc.render(0, 0, svgImage);
gc.releaseTarget();
}

当Image创建后,你可以对它进行删改等操作,例如下面就修改了圆的半径。

Document document = svgImage.getDocument();
SVGElement circle = (SVGElement) document.getElementById("circle");
circle.setFloatTrait("r", 40.0f);

上面介绍了如何从文件创建SVG Image,下面的代码说明了如何在代码中创建。
ScalableGraphics gc = ScalableGraphics.createInstance();

SVGImage svgImage = SVGImage.createEmptyImage(null);
svgImage.setViewportWidth(getWidth());
svgImage.setViewportHeight(getHeight());
Document document = svgImage.getDocument();
SVGSVGElement root = (SVGSVGElement) document.getDocumentElement();
String namespace = root.getNamespaceURI();

SVGElement element = null;
try{
element = (SVGElement) document.createElementNS(namespace, "circle");
}catch(Exception e){
SVGDynamic.addInfo(e.toString());
e.printStackTrace();
}
SVGRGBColor fillColor = root.createSVGRGBColor(0xC8, 0xC8, 0);
SVGRGBColor strokeColor = root.createSVGRGBColor(0, 0, 0);

element.setId("circle");
element.setFloatTrait("cx", 75.0f);
element.setFloatTrait("cy", 75.0f);
element.setFloatTrait("r", 25.0f);
element.setFloatTrait("fill-opacity", 0.5f);
element.setFloatTrait("stroke-width", 5.0f);
element.setRGBColorTrait("fill", fillColor);
element.setRGBColorTrait("stroke", strokeColor);

root.appendChild(element);

public void paint(Graphics g) {
gc.bindTarget(g);
gc.render(0, 0, svgImage);
gc.releaseTarget();
}

WTK 2.5提供了JSR 226的实现环境,并且里面还提供了例子可供开发者参考。

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

import javax.microedition.m2g.ScalableGraphics;
import javax.microedition.m2g.SVGImage;

import org.w3c.dom.Document;
import org.w3c.dom.svg.SVGElement;
import org.w3c.dom.svg.SVGSVGElement;
import org.w3c.dom.svg.SVGRGBColor;


public class HelloSVG extends MIDlet {

protected SVGImageCanvas svgCanvas = null;

public HelloSVG() {

}

public void startApp() {
SVGImage svgImage = SVGImage.createEmptyImage(null);
Document doc = svgImage.getDocument();
SVGSVGElement svg = (SVGSVGElement) doc.getDocumentElement();
SVGElement textElement = (SVGElement) doc.createElementNS("http://www.w3.org/2000/svg", "text");
textElement.setTrait("#text", "Hello JSR-226 !");
textElement.setFloatTrait("x", 50.0f);
textElement.setFloatTrait("y", 50.0f);
SVGRGBColor textColor = svg.createSVGRGBColor(0, 0, 0);
textElement.setRGBColorTrait( "stroke", textColor);

svg.appendChild(textElement);

svgCanvas = new SVGImageCanvas(svgImage);
Display.getDisplay(this).setCurrent(svgCanvas);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}

class SVGImageCanvas extends Canvas {

protected SVGImage svgImage;

protected ScalableGraphics sg = ScalableGraphics.createInstance();


protected SVGImageCanvas(final SVGImage svgImage) {
this.svgImage = svgImage;
}

public void paint(Graphics g) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
sg.bindTarget(g);
svgImage.setViewportWidth(getWidth());
svgImage.setViewportHeight(getHeight());
sg.render(0, 0, svgImage);
sg.releaseTarget();
}
}


分享到:
评论

相关推荐

    SVG经典入门(SVG应用指南) 完整带目录

    本书内容丰富,涵盖了SVG从入门到高级应用的方方面面,为有意深入学习SVG的读者提供了一条清晰的学习路径。对于前端开发人员、设计师以及对Web图形感兴趣的开发者来说,这是一本不可多得的学习和参考资料。

    开发工具 fontawesome-webfont.svg

    开发工具 fontawesome-webfont.svg开发工具 fontawesome-webfont.svg开发工具 fontawesome-webfont.svg开发工具 fontawesome-webfont.svg开发工具 fontawesome-webfont.svg开发工具 fontawesome-webfont.svg开发工具...

    SVG开发实践

    第1篇是SVG开发准备篇,介绍SVG的基本知识以及进行SVG开发所需掌握的准备技术,如XML、CSS、JavaScript等。第2篇是SVG基础规范篇,介绍W3C组织为SVG定义的标准,涵盖了SVG规范的大部分内容。第3篇是SVG应用篇,介绍...

    SVG开发实践源码

    SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式,它被广泛应用于网页设计、移动应用和软件开发中,因为SVG图像可以无损缩放,不会因为放大而失去清晰度。本压缩包提供了SVG开发实践的源码,包含了16个...

    SVG虚拟打印机开发

    ### SVG虚拟打印机开发知识点解析 #### 一、SVG标准概述 **SVG(Scalable Vector Graphic,可缩放矢量图形)**是由W3C(World Wide Web Consortium)制定的一种基于XML(Extensible Markup Language)的二维矢量...

    svg开发实践PDF电子书

    这份“SVG开发实践”PDF电子书是一本非常适合初学者入门SVG技术的教程。它涵盖了SVG的基本概念、语法以及在实际项目中的应用。 在SVG中,图像由几何形状(如直线、曲线、圆、椭圆等)组成,这些形状可以被无限放大...

    《SVG开发实践》电子书和书中例子源代码

    本书从指导程序员实际开发应用程序的角度,全面系统地介绍了SVG的核心技术。全书分为3篇。第1篇是SVG开发准备篇,介绍SVG的基本知识以及进行SVG开发所需掌握的准备技术,如XML、CSS、JavaScript等。第2篇是SVG基础...

    svg开发工具+SvgDeveloper1.05版注册机+svg客户端插件

    svg开发工具+SvgDeveloper1.05版注册机+svg客户端插件绝对完整,不骗大家。

    世界266个国家的国旗 SVG 图标1X1和 4x3 全球国家国旗svg格式 国家svg图

    世界所有国家的国旗 SVG 图标 共266国家 1X1和 4x3 格式 文件命名为 国家缩写 (ad.svg)

    svg-t 图形 指南

    ### SVG-T图形指南知识点 #### 一、引言与背景 **SVG-T**(Scalable Vector Graphics Tiny)是为移动设备设计的一种矢量图形格式,由W3C(World Wide Web Consortium)定义并标准化。它是一种轻量级且功能强大的...

    SVG开发实践(黄凯伟)及书源代码

    《SVG开发实践》是由黄凯伟编著的一本专业书籍,专注于SVG(Scalable Vector Graphics)技术的深度探讨和应用实例。SVG是一种基于XML的矢量图形格式,广泛用于网页设计、移动应用以及各种图形用户界面,因为它支持...

    SVG开发实践 (黄凯伟) 源代码

    SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式,它被广泛应用于网页设计、移动应用和软件开发中,因为SVG图像可以无损缩放,不会因为放大而失去清晰度。《SVG开发实践》这本书,作者黄凯伟,显然是...

    SVG经典教程2 (SVG从入门到精通)

    **SVG(Scalable Vector Graphics)**是一种基于XML的矢量图像格式,广泛应用于网页设计、移动应用和图形用户界面中。本教程“SVG经典教程2”是SVG学习的初级教程,旨在帮助初学者深入理解并掌握SVG的核心概念和实用...

    svg经典入门书籍.pdf

    SVG,全称Scalable Vector Graphics,是一种基于XML的矢量图像格式,广泛应用于网页设计、移动应用、软件开发等领域。SVG图像可以无损放大,不失真,这使得它在需要高质量图形展示的地方尤其适用。这本《SVG经典入门...

    SVG经典教程1 (SVG从入门到精通)

    这个“SVG经典教程1 (SVG从入门到精通)”上册,作为初级教程,旨在帮助读者快速掌握SVG的基本概念和实践技巧。 教程可能涵盖以下关键知识点: 1. SVG基础知识:解释SVG的定义,以及与位图(如JPEG或PNG)的区别。...

    svg初级教程(入门)

    SVG,全称Scalable Vector Graphics,是一种基于XML的矢量图像格式,广泛应用于网页设计、移动应用和软件开发等领域。作为一个初级教程,它旨在帮助初学者理解和掌握SVG的基本概念和使用方法,通过实例教学,使得...

    SVG 开发实践 源码

    在本实践项目中,我们将深入探讨SVG的开发技巧和应用。 1. **SVG的基本结构**: SVG图像由一系列的几何形状和路径构成,例如矩形(rect)、圆形(circle)、椭圆(ellipse)、线条(line)、曲线(path)等。每个...

    iOS 加载SVG文件

    在iOS开发中,SVG(Scalable Vector Graphics)是一种用于绘制高质量、可缩放图形的矢量图像格式。与像素图不同,SVG图在放大时不会失真,因此在多种分辨率的设备上都能保持清晰。本篇文章将详细介绍如何在iOS应用中...

Global site tag (gtag.js) - Google Analytics