??xml version="1.0" encoding="utf-8" standalone="yes"?> 记得以前看过一高手写的文章?/p>
http://www.cnblogs.com/zhengyun_ustc/archive/2006/03/28/j2me_streaming_demo.html q种思想需要用C个线E去控制视频的播放,感觉思\是好的,不过比较复杂?/p>
上个C拜我结合了上面高手的思\Q自己ȝ了另外一直播攄方式?那就是队列的方式?/p>
我们可以采用一些元数据的描q方式。来指导媒体播放cdQ播攑车,已经播放路径Q播N列的。我们的E序只需要解释下q个元数据,q且按照q种元素局的格式来获取媒体播放队列Q最后采用一个线E构造播N列的方式q行播放?/p>
下面看看我是怎么hq这些数据的 <root name="wuhua"> 上面的是一些xml播放列表描述文g?/p>
q段是指定一些参C及一些媒体编码。跟播放队列?/p>
<video name="信乐?-L" desc="about" encode="audio/x-wav" > q是一部小电媄的播N?/p>
<video name="一部很单的电媄" desc="about" encode="video/mpeg" > 我基本已l实C上面的流媒体播放方式Q不q在试的过E中发现在播N频,或者视频设备的时候,感觉?/p>
两个Player之间切换有点卡,大概卡那?.1U。暂时还没有惛_解决办法? 有好东西需要跟大家分n。你有好思\吗,大家分n下吧?/p>
PSQ?实现上面的流媒体ҎQ采用了EasyMF 框架 Micro Window
Toolkit(MWT)是一个用于开?a onclick="javascript:tagshow(event, 'J2ME');" href="javascript:;" target="_self">J2ME
用户界面(UI)的工具包。它h友好Q强大,快速,开?/strong>
{特性。因为它?灉|"来自
AWTQSwing和SWT。可以用bitmap fonts{来自定义组件。它专门为嵌入式开发而设计和优化。基于LGPL发布?br />
目地址Q?a target="_blank">http://j2me-mwt.sourceforge.net/
J4ME
是一个J2ME应用E序开发包。它包括一个UI框架Q一个日记框架用于帮助调试因不同品牌手机
的差异而生的问题Q一个蓝牙GPS框架让你能够?
用JSR-179 Location
API接口从蓝牙GPS讑֤获取定位信息和一个Javacd其中包含了J2ME中没有的Ҏ比如双精度型数字的计等?br />
一个非常小的script脚本引擎Q可以同时在j2me / j2se / c++ platform上面q行 q东西不错,是一个开源的脚本引擎Q大家可以学习里面的思想 http://sourceforge.net/projects/j2megamescript/
Y!Goq是一个Yahoo Messenger J2ME客户端?/p>
EBookME是一个用于把导入的文?a onclick="javascript:tagshow(event, '%CE%C4%BC%FE');" href="javascript:;" target="_self">文g
(HTML,DOC,PDF,…)生成J2ME电子书籍格式(JAD,JAR)的JavaE序。生成的电子?/strong>
c可以在支持MIDP1.0的手Z阅读?/p>
http://ebookme.sourceforge.net/
jMobileCore
包是一个强大的工具用来开发J2ME应用E序.jMobileCore提供支持开发简z的Q基于Canvas?a onclick="javascript:tagshow(event, '%CD%BC%D0%CE');" href="javascript:;" target="_self">囑Ş
用户接口Q快速地数据讉KQ可靠地?
?化多U程midlet应用E序。jMobileCore包可工作在Q何支持J2ME (MIDP1.0
和CLDC1.0)的移动电话与PDA讑֤. http://jmobilecore.sourceforge.net/
q有l典的J2ME-POLISH 原文
MIDP 2.1规范最l定E于2006q??6日,是对MIDP2.0规范的补充。和MIDP 2.0规范相比Q主要增加了下列新特性: http://www.3geye.net/?3/viewspace-2837 关于炚w字库在J2ME的实现?br />
最q在学习C的过E中无意发现了点阵字库的东西。整理了下,在J2ME实现了下相关的算法?br />
下面是DOS的一D话 文章出处 http://www.3geye.net/bbs/thread-268-1-1.html 关于UIlgQ上下滚动,qx滚动?span class="t_tag">技?/span>实现探讨 关于UIlgQ上下滚动,qx滚动的技术实现探?/p>
在我设计的UI中存在的两个问题一直没有解军_ 1.是焦点处理机?- q个问题已经在前几天我解决了?/p>
2.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了?/p>
下面我重点老讨个问题。希望大家有什么好的想法也说下。分享下l验Q让我少走弯?/p>
现在来看看下面的?/p>
假设Q图A ?整个Canvas可以昄的图Q?图B?需要显C的图, 我们来看看这适合坐滚动设计吗。看看下面的逻辑。现在假设HA为A的高度, HB为B的高度,ScrollH表示滚动条的高度。进度条的位|ؓScrollYQ?span class="t_tag">pȝ滚动的增量ؓregionY 1Q?nbsp; 如果A的高?gt; B的高度,则不需要滚?/p>
2Q?nbsp; 如果A的高?/p>
下面?span class="t_tag">法比例ScrollH/HA = HA/HB è ScrollH=HA*HA/HBQ?/strong> 得到当前q度条的位置?ScrollY/HA = regionY/HB è ScrollY=regionY*HA/HB 当调用keyPressed事g的时候处理regionY; è downQrgionY -= 30; upQregion += 30Q?/strong> 然后自动更新ScrollY Q最后调用repaint(); 上面是算?span class="t_tag">模型Q现在来看下我的具体实现Q希望大家对q个模型多多批评Q看看还有没有更好的法实现?/strong> 在调式的q程中遇C个很特别的问题,居然public void keyPressed(int keyCode)没有M响应。哈哈,是我DQ原来是采用了print的方法,所以没仔细看,看不到输出。郁闷啊 l过试Q此路完全是走的通的Q现在看看代码是怎么实现的,我知识对字符串进行简单的处理实现Q对于更复杂的UIlgQ原理差不错。不q要做下修?/strong> /** Title: Description: Copyright: Copyright (c) 2007 Company: private String text="兛_于UIlgQ上下滚动,qx滚动的视U技术探讨在我设计的UI中存在的两个问题一直没有解军_1.是焦点处理机?- q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一?"+ private int numHeight; public TestCanvas() { this.setFullScreenMode(true); protected void paint(Graphics g) { this.scrollHeight = this.sreenHeight * this.sreenHeight/numHeight; g.setColor(255); g.setColor(0xFFFFFF); public void keyPressed(int keyCode) {
GameCanvas是Canvas的子c,因此他同L承了Canvascȝ一些特性,比如showNotify()Ҏ会在Canvas被显C在屏幕的时候调用,而hideNotify()会在Canvasd屏幕的时候被调用。我们可以把他们当作{8}来用,用于初始化和销毁资源。比?br />
// When the canvas is shown, start a thread to protected void showNotify() protected void hideNotify() 在游戏开发中最重要的就是接受用戯发的事g然后重新l制屏幕Q通常我们使用getKeyStates()Ҏ判断哪个键被按下了,然后l制屏幕Q调用flushGraphics()。在GameCanvas中,pȝ事实上已lؓ我们实现了双~冲技术,因此每次我们l制的时候就是在off-
screen上绘制的。结束后通过flushGraphics把它复制到屏q上厅R下面是典型的接受事件、处理逻辑、绘制屏q的代码?br />
// Get the
Graphics object for the off-screen buffer while (true) { // Clear the background to
white // Draw the Sprite // Flush the off-screen buffer
下面开始实现我们滚动星I的效果Q其实设计的思想非常单。我们启动一个线E,使用copyArea()Ҏ把屏q的内容往下复制一个像素的距离。然后绘ȝ一个空白的直线Q随机的在直U上l画点儿Q这Lh像星空一样了。逻辑代码如下Q?br />
// The game loop. public void run() if ((state & DOWN_PRESSED) != 0) // Repaint the screen by first scrolling the graphics.copyArea(0, 0, w, h, 0, 1, Graphics.TOP |
Graphics.LEFT); // Now wait... try 下面l出源代?br />
/* import javax.microedition.lcdui.*; public class GameCanvasTest extends MIDlet implements
CommandListener private Display display; public static final Command exitCommand = new Command("Exit",
Command.EXIT, public GameCanvasTest() public void commandAction(Command c, Displayable d) protected void destroyApp(boolean unconditional) public void exitMIDlet() public Display getDisplay() protected void initMIDlet() getDisplay().setCurrent(c); protected void pauseApp() protected void startApp() throws MIDletStateChangeException import java.util.Random; // A simple example of a game canvas that displays public class StarField extends GameCanvas implements Runnable private static final int SLEEP_INCREMENT = 10; private static final int SLEEP_INITIAL = 150; private static final int SLEEP_MAX = 300; private Graphics graphics; private Random random; private int sleepTime = SLEEP_INITIAL; private volatile Thread thread; public StarField() graphics = getGraphics(); // The game loop. public void run() if ((state & DOWN_PRESSED) != 0) // Repaint the screen by first scrolling the graphics.copyArea(0, 0, w, h, 0, 1, Graphics.TOP |
Graphics.LEFT); // Now wait... try // When the canvas is shown, start a thread to protected void showNotify() protected void hideNotify() 下面是实C码,大家可以参考下Q也许还有更优化的设计呢?/p>
下面代码也是从Intenet来的Q只是修改了下?/p>
/** ׃个静态方法很单的。哈
I间Q?a href="htt://wuhua.3geye.net" target="_blank">htt://wuhua.3geye.net
转蝲请保留上面的信息Q请重知识产品Q谢?/p>
<li url="/video.xml">MTV</li>
<li url="/music.xml">MUSIC</li>
</root>
<item>/0.wav</item>
<item>/1.wav</item>
<item>/2.wav</item>
<item>/3.wav</item>
<item>/4.wav</item>
<item>/5.wav</item>
<item>/6.wav</item>
<item>/7.wav</item>
<item>/8.wav</item>
<item>/9.wav</item>
<item>/10.wav</item>
<item>/11.wav</item>
<item>/12.wav</item>
<item>/13.wav</item>
<item>/14.wav</item>
<item>/15.wav</item>
<item>/16.wav</item>
<item>/17.wav</item>
<item>/18.wav</item>
<item>/19.wav</item>
<item>/20.wav</item>
<item>/21.wav</item>
<item>/22.wav</item>
</video>
<item>/0.mpg</item>
<item>/1.mpg</item>
<item>/2.mpg</item>
<item>/3.mpg</item>
<item>/4.mpg</item>
<item>/5.mpg</item>
<item>/6.mpg</item>
<item>/7.mpg</item>
<item>/8.mpg</item>
<item>/9.mpg</item>
<item>/10.mpg</item>
<item>/11.mpg</item>
<item>/12.mpg</item>
<item>/13.mpg</item>
<item>/14.mpg</item>
<item>/15.mpg</item>
</video>
]]>
文章出处Q?a >http://www.3geye.net/?3/viewspace-3347
MWT
1 - J2ME Desktop:
Download theJad
andJar
or view it withJava WebStart
2 - ELP ~ RPG:
Download theJad
andJar
or view it withJava WebStart
3 - Progress Bar:
Download theJad
andJar
or view it withJava WebStart
4 - Messenger Interface:
Download theJad
andJar
or view it withJava WebStart
J4ME-开源的UI Logger 目
OpenBaseMovil
BaseMovil是一个J2ME应用E序开发框架。它由多个比较独立类库组成包括:
OpenBaseMovil-coreQ整个框架的底层基础
cdQ它主要提供国际?/strong>
支持、Q务控制、加密、压~、QҎ持、properties文g支持、一个MVC框架、一个事件框架?span style="display: none;">3GEYEXO3L0@C$z
M8E
OpenBaseMovil-dbQ一个关pd数据?/strong>
引擎Q其中一个表格存储的数据可上千?span style="display: none;">3GEYE1]
m$?/vE|1@
OpenBaseMovil-scriptQ一?a onclick="javascript:tagshow(event, '%BD%C5%B1%BE');" href="javascript:;" target="_self">脚本
引擎?span style="display: none;">3GEYE2\G:rVA7Ez
OpenBaseMovil-uiQ一个UI工具包?br />
q个几类库都能够完全集成在一起用?span style="display: none;">3GEYEotaZ5J
http://www.openbasemovil.org/J2ME 游戏
脚本引擎/J2me game
script engine
它的目标是用这个脚本引擎便于开发一个更加灵zȝj2me 游戏?br />
q个脚本有点像BASIC
里面其中带了一个例子,?子棋。感觉挺不错的。这东西在SF也挺z跃的?/p>
Y!Go
EBookME
jMobileCore
J2ME Polish
2.0
]]>http://www.3geye.net/?3/viewspace-3196
今天在玩开?/strong>的Script的引擎的时候在解释下面script的时候出现问题,
你知道ؓ什么吗
i = 5
j = 1232323
h = i + j
println(h)
抛出q个异常
4 : Illegal statment ,String index out of range: -9
java.lang.StringIndexOutOfBoundsException: String index out of range: -9
at java.lang.String.substring(Unknown Source)
at gscript.Interpreter.callSub(Interpreter.java:1355)
at gscript.Interpreter._sub(Interpreter.java:401)
at gscript.Interpreter.callSub(Interpreter.java:1353)
at gscript.Interpreter.start(Interpreter.java:227)
at gscript.Interpreter.start(Interpreter.java:198)
at ScriptTest.main(ScriptTest.java:12)
后来发现原来是println(h)了一个换行符受?br />
现在我修改了下源代码?span style="display: none;">3GEYE P M \ O#c
我修改了下代码后Q这个bug解决?br />
看原来的代码
for (int i = 0; i < srcBytes.length; i++) {
if (srcBytes[i] == 0x0a || i + 1 == srcBytes.length) { // 行结?或?a target="_self">文gl束
try {
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
srcCode[lineCount++] = s;
} catch (Exception ex1) {
}
line.reset();
} else {
line.write(srcBytes[i]);
}
}
修改后的代码
for (int i = 0; i < srcBytes.length; i++) {
if (srcBytes[i] == 0x0a ) { // 行结?或者文件结?span style="display: none;">3GEYE:[ o Q5_ d1J1^ {
try {
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
//System.out.println(s);
srcCode[lineCount++] = s;
} catch (Exception ex1) {
}
line.reset();
} else {
line.write(srcBytes[i]);
if(i + 1 == srcBytes.length){
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
s = s.trim();
//System.out.println(s);
srcCode[lineCount++] = s;
}
}
}
]]>
昨天Q因为工作需要想了解下脚步引擎的实现原理Q下载了一?a href="javascript:;" onclick="javascript:tagshow(event, '%BF%AA%D4%B4');" target="_self">开?/strong>?a href="javascript:;" onclick="javascript:tagshow(event, '%BD%C5%B1%BE');" target="_self">脚本引擎Q研I了下,
如果大家需要下载的Q请到我I间Google下,可以发现这个脚本引擎的具体地址?span style="display: none;">3GEYEX6xWl(p Y!Cl)z1^$`
下面我来说下q个脚本引擎的一?a href="javascript:;" onclick="javascript:tagshow(event, '%D0%D4%C4%DC');" target="_self">性能问题?br />
首先来看看他是怎么d脚本文g的?span style="display: none;">3GEYE6C~3UC
p4d8{
代码
InputStream is = new Object().getClass().getResourceAsStream(path); //j2me使用
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch = 0;
while ( (ch = is.read()) != -1) {
baos.write(ch);
}
上面是作者读取脚本文件代码,本h觉得q个代码的效率很低,一个个字符d出来Q速度很慢Q我试了下发现d一个很单的文g需?7毫秒Q在Dell 1420的机器上。这L效率是很可怕的?br />
下面看看我是怎么提高他的性能的?br />
byte[] buff = new byte[512];
long total = 0;
int count = 0;
while ((count = is.read(buff)) > 0) {
baos.write(buff, 0, count);
total += count;
}
我是采用了一?12字节的缓冲区去读取这些数据,l过试发现Dell 1420机器上的p?毫秒?span style="display: none;">3GEYEMG
U,s4| A$t
快了非常多?br />
不过脚本引擎除了d源文件外Q最重要的核心是解释引擎的速度?span style="display: none;">3GEYE%\_`K4?#s;Zv
有时间l研I下?span style="display: none;">3GEYEjY-`8MTs
]]>
http://www.3geye.net/?3/viewspace-2909
1?一个TextField或一个TextBox的最尺寸(存储定wQ不能少?000个字W?span style="display: none;">3GEYEX(x,P%@H[3s0c?
2?LCDUI布局指o必须被遵?span style="display: none;">3GEYE{!h[$f&l
3?LayoutManager.insert()Ҏ的行为必M照以下的描述Qinsert(Layer,int)
描述Q?span style="display: none;">3GEYETqCGY
Public void insert(javax.microedition.lcdui.game.Layer l,int index)
插入一个新的Layer对象到LayoutManager在指定的索引?br />
描述Q?br />
?
入一个已l被d到这个LayoutManager的Layer对象{于先用LayoutManager.remove()Ҏ删除它,再用
insert()Ҏd到特定的索引。在LayoutManager.remove()Ҏ被调用前Q抛?
IndexOutOfBoundsException的情况被?span style="display: none;">3GEYE|a]dN~D
参数Q?span style="display: none;">3GEYEX2Y/JKr1mPGJ
LQ被插入的Layer对象
IndexQ在被添加的新的Layer对象的烦引?span style="display: none;">3GEYEQ.Z2[)eb0G
抛出Q?span style="display: none;">3GEYER?W8}#CKX#B2{:F`$Fa
NullPointerExceptionQ如果Layer对象为null
IndexOutOfBoundsExceptionQ?
如果索引值小?。如果烦引值大于已l被d到LayoutManager中的Layer对象的数量且Layer对象不能被添加到q个
LayoutManager中。如果烦引值大于已l被d到LayoutManager中的Layer对象的数量且Layer对象已经被添加到q个
LayoutManager?br />
4?一个带有item Command对象且表C模式是Item.PLAIN的StringTtem对象必须L被作为添加了Command对象且表C模式是Item.HYPERLINK的StringTtem对象的方式显C?br />
5?
许多的MIDP LUDUI囑փlg能包含文本(换句话说Q一个字母数字字W)Q那被显C给用户。这些组件的例子是List, TextBox ,
Alert , StringItem
,Form和Item。一个实现常帔R要截断这些可见的文本因ؓ不能适合被给的UIlg的指定空间。在q种情况下,一个实现必M用一个适当的可视化指示
Q例如一个省略符P来指C用P文本被截断。实际的W号或被用来昄截断的文本的W号以来于当前设备选择的区域设|。然而,可视化指C应该和用在讑֤?
地的UI的指CZ致?span style="display: none;">3GEYE!_Ka5s^
s.Y m
6?Canvas的触怺件必被支持Q如?u>基础g支持q个特色。在q种情况下,Canvas.hasPointerEvents()Ҏ应该Lq回true?span style="display: none;">3GEYEk K
W1l(U d@ ?3L5e
7?Canvas的触摸拖曳事件必被支持Q如果基g支持q个特色。在q种情况下,Canvas.hasPointerEvents()Ҏ应该Lq回true?span style="display: none;">3GEYElG-RuZ*n
~W7}
8?Canvas的重复事件必被支持。在q种情况下,Canvas.hasRepeatEvents()Ҏ应该Lq回true?br />
9?双缓冲图像必被支持。在q种情况下,Canvas.isDoubleBuffered()Ҏ应该Lq回true?br />
10?不同的文本输入模式的可用性(例如Q预a输入和仅仅是数字的输入)应该?u>Java和本地的应用E序怸致。这意味着Q例如,如果预言输入文本模式在本地应用程序中可用Q那也应该在Java应用E序中可用?br />
11?
Image对象的创建(不管格式Q必至支持:寸{于Q屏q宽度)乘以Q屏q高度)乘以Q以字节为单位的颜色深度Q或262144比特Q?28×
128×16比特Q?2KBQ,无论哪一个更大。注意,一个Image对象的内在表现应该保持至每个象?6字节的颜?透明度数?br />
12?每一个包括在字符串值的通过System.getProperty(“microedition.commports”)Ҏq回的串行端口名字必d获取通过javax.microedition.io.CommConnection接口
12?在每个协议,AllowedSender域必d配适当的输入事件的地址域。地址域的使用和语法和语意以来于协议。然而,地址和过滤器必须被比较通过_的字W串匚wQ在那里Q字W串被一个接着一个字W的比较Q字W需要正地匚w通过两个通配W?span style="display: none;">3GEYEl?#gi1iKQ
13?
以下地网l通信协议必须被支持,提供了以下Java ME接口的实玎ͼjavax.microedition.io.SockerConnection
, javax.microedition.io.SecureConnection,
javax.microedition.io.HttpsConnection
14?javax.microedition.io.HttpsConnection和javax.microedition.io.SecureConnection必须支持SSLv3协议Q其它的Q例如TLS,WTLS也许被支持?br />
15?应用E序描述W应该包含MIDlet-Permissions
16?
以下的JAD/manifest文g属性被定义来支持指定预期的q行时执行环境:Runtime-Execution-EnvironmentQ这是一?
可选的属性,指出了应用程序必ȝq行时执行环境。这个属性也许有值MIDP.CLDC.如果MIDlet
suite不指定属性,隐含的默认值是MIDP.CLDC。当值是MIDP.CLDCQ实现的行ؓ必须坚持在以下显C的更多的细节描q。这个属性值的附加
D在将来定义?a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%CA%D6%BB%FA');">手机实现必须支持q个属性。当值是MIDP.CLDCQ实现的行ؓ必须坚持以下要求Q?、支持API和API行ؓQ以及基虚拟机,必须
ZCLDC1.1规范?、手机实C怺选一C用Java
ME的CDC规范。然而,如果CDC被用作基配置Q运行在q个q_端的应用程序必ȝ见一个语义学和功能上{于CLDC1.1q_的环境。CDC特定
的API或者CDC特定行ؓ必须不能被暴露给应用E序或应用程序开发者?、当一个应用程序定义了Runtime-Execution-
Environment属性|应用E序必须也定义一个CLDCq_在MicroEdition-Configuration属性g?、如果一个应?
E序定义了不被实现支持的Runtime-Execution-Environment属性值或MicroEdition-Configuration?
性|应用E序不能被安装。所有的手机实现必须支持MIDP.CLDC值对于Runtime-Execution-Environment属性?span style="display: none;">3GEYEa/YjP!{Btk
17?用户使用OTA下蝲安装之后Q实现必LC用h否启动MIDlet
18?实现必须允许MIDlet创徏最ؓ10个的U程
19?支持臛_512个属?br />
20?支持MIDlet suite包含1?个MIDlet
21?每个MIDlet suite的RMS臛_保证64K的空_在内存够的情况?br />
22?每个MIDlet suite臛_可以创徏10个独立记录存?br />
23?MIDP的MMAPI的子集必遵守MMAPI1.1或以后版?br />
24?MicroEdition.profilespȝ属性不能包含相同profile的不同的版本
25?Image对象中ISO/IEC JPEG和JFIF被支?br />
26?支持载入深度?????6?2位的PNG格式
27?TextBox和TextField的约束TextField.EMAILDDR和TextField.URL必须允许相同的字W被输入如同被允许输入在TextField.ANYU束?br />
28?适合的设备必d现基于时间的推注册,如果没有其它的安全机制基于时间的推注册不需要被昑ּ的用L许可
]]>
对于使用量的汉字图形程序,完全没有必要带巨大的汉字库来q行Q?br />
只要内存允许Q你可以把汉字字模直接定义ؓ数组的信息存储在EXE?br />
仉。通过q个工具Q你可以把单个字模信息直接取出来Q然后在源代
码中_脓。该工具的强大在于不仅可以生?2×12?6×16宋体q些
存在于DOS字库的字模,而且可以生成16×16楷体、黑体甚臌定义?br />
体的字模Q而且可以提供6U字模大供您选择q即旉览效果!对
用少量汉字的囑Ş~程能够提供极大方便?br />
相对于绘制这些字体的J2ME函数是:
首先Q我们要通过工具来生成点阵字库的GB2312字模Q然后在囑փ中绘制出来,下面我给Z些字体的字模Q?br />
废话说Q具体看例子吧。有啥不明白Q或者需要探讨的Q到wuhua.3geye.net。上面有我的联系方式?br />
import javax.microedition.midlet.*;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Display;
public class FontMIDlet extends MIDlet {
public FontMIDlet() {
}
protected void destroyApp(boolean _boolean) throws
MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(new FontCanvas());
}
char yi12[] = {
/* 以下?'Q? ?12炚w宋体 字模Q?4 byte */
0x00, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x3C, 0x00,
0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00,
0x0C, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
};
char er12[] = {
/* 以下?'Q? ?12炚w宋体 字模Q?4 byte */
0x00, 0x00, 0x3E, 0x00, 0x63, 0x00, 0x03, 0x00,
0x06, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00,
0x63, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
};
char dian12[] = {
/* 以下?'? ?12炚w宋体 字模Q?4 byte */
0x04, 0x00, 0x07, 0xC0, 0x04, 0x00, 0x04, 0x00,
0x3F, 0x80, 0x20, 0x80, 0x20, 0x80, 0x3F, 0x80,
0x00, 0x00, 0x49, 0x40, 0xC9, 0x20, 0x00, 0x00,
};
char zhen12[] = {
/* 以下?'? ?12炚w宋体 字模Q?4 byte */
0xF2, 0x00, 0x9F, 0xE0, 0x92, 0x00, 0xA5, 0x00,
0xA5, 0x00, 0x97, 0xE0, 0x91, 0x00, 0xB1, 0x00,
0x8F, 0xE0, 0x81, 0x00, 0x81, 0x00, 0x00, 0x00,
};
char song16[] = {
/* 以下?'? ?16炚w宋体 字模Q?2 byte */
0x02, 0x00, 0x01, 0x00, 0x7F, 0xFE, 0x41, 0x04,
0x81, 0x08, 0x01, 0x00, 0x7F, 0xFC, 0x03, 0x80,
0x05, 0x80, 0x05, 0x40, 0x09, 0x20, 0x11, 0x10,
0x21, 0x0E, 0x41, 0x04, 0x01, 0x00, 0x00, 0x00,
};
char ti16[] = {
/* 以下?'? ?16炚w宋体 字模Q?2 byte */
0x10, 0x40, 0x18, 0x40, 0x10, 0x40, 0x20, 0x40,
0x37, 0xFC, 0x60, 0xC0, 0xA0, 0xE0, 0x21, 0x60,
0x21, 0x50, 0x22, 0x48, 0x24, 0x4E, 0x2B, 0xF4,
0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x00, 0x00,
};
char zi24[] = {
/* 以下?'? ?24炚w隶书 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x00, 0x08, 0x1C, 0x10,
0x1F, 0xFF, 0xF0, 0x18, 0x00, 0x30, 0x18, 0xFF,
0x10, 0x09, 0xC3, 0x90, 0x00, 0x3C, 0x00, 0x00,
0x1C, 0x00, 0x3F, 0xFF, 0xFE, 0x7E, 0x0C, 0xFE,
0x00, 0x1C, 0x04, 0x00, 0x1C, 0x00, 0x04, 0x3C,
0x00, 0x03, 0xF8, 0x00, 0x00, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
char mo24[] = {
/* 以下?'? ?24炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x02, 0x00,
0x30, 0x03, 0x0C, 0x20, 0x03, 0x04, 0x3C, 0x02,
0x07, 0xE0, 0x02, 0x1C, 0x40, 0x02, 0x00, 0x40,
0x03, 0xC0, 0x70, 0x7E, 0x1F, 0x98, 0x02, 0x08,
0x10, 0x06, 0x0F, 0x90, 0x07, 0x88, 0x10, 0x0A,
0xCB, 0xE0, 0x1A, 0x05, 0x00, 0x12, 0x01, 0x1E,
0x22, 0x0F, 0xFE, 0x42, 0x32, 0x80, 0x02, 0x02,
0x40, 0x02, 0x04, 0x60, 0x02, 0x0C, 0x30, 0x02,
0x18, 0x1C, 0x02, 0x20, 0x0F, 0x02, 0x00, 0x00,
};
char guan48[] = {
/* 以下?'? ?48炚w黑体 字模Q?88 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x38, 0x00,
0x03, 0x00, 0x03, 0xC0, 0x38, 0x00, 0x07, 0x80,
0x03, 0xC0, 0x38, 0x00, 0x07, 0xC0, 0x03, 0xC0,
0x38, 0x00, 0x03, 0xF1, 0xFF, 0xFF, 0xFF, 0xFC,
0x01, 0xF9, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x79,
0xF1, 0xC0, 0x39, 0xFC, 0x00, 0x30, 0x01, 0xC0,
0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xF0, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0,
0xFF, 0xE0, 0x00, 0x00, 0xE0, 0x70, 0xE0, 0xE0,
0x0E, 0x00, 0xE0, 0x70, 0xE0, 0xE0, 0x1F, 0x80,
0xE0, 0x70, 0xE0, 0xE0, 0x1F, 0xE0, 0xFF, 0xF0,
0xFF, 0xE0, 0x07, 0xF0, 0xFF, 0xF0, 0xFF, 0xE0,
0x01, 0xF0, 0xFF, 0xF1, 0xFF, 0xE0, 0x00, 0x60,
0x08, 0x07, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x03,
0x80, 0x00, 0x00, 0x00, 0x1E, 0x03, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x00,
0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF,
0xFF, 0xF0, 0x00, 0x00, 0x7C, 0x03, 0x80, 0x00,
0x00, 0x20, 0x7C, 0x03, 0x80, 0x00, 0x00, 0x70,
0xFC, 0x03, 0x80, 0x00, 0x00, 0x71, 0xFF, 0xFF,
0xFF, 0xE0, 0x00, 0x73, 0xFF, 0xFF, 0xFF, 0xE0,
0x00, 0xF3, 0xBC, 0x03, 0x80, 0x60, 0x00, 0xE3,
0xBC, 0x03, 0x80, 0x00, 0x01, 0xE1, 0x3C, 0x03,
0x80, 0x00, 0x01, 0xC0, 0x3F, 0xFF, 0xFF, 0xE0,
0x01, 0xC0, 0x3F, 0xFF, 0xFF, 0xE0, 0x03, 0xC0,
0x3F, 0xFF, 0xFF, 0xE0, 0x03, 0x80, 0x3C, 0x03,
0x80, 0x00, 0x07, 0x80, 0x3C, 0x03, 0x80, 0x00,
0x0F, 0x80, 0x3C, 0x03, 0x80, 0x00, 0x0F, 0x00,
0x3F, 0xFF, 0xFF, 0xF8, 0x1F, 0x00, 0x3F, 0xFF,
0xFF, 0xF8, 0x1F, 0x00, 0x3C, 0x00, 0x00, 0x00,
0x06, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
char guan64[] = {
/* 以下?'? ?64炚wҎ黄草?字模Q?12 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xCF, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1E, 0x07, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x03, 0xF8, 0x07, 0x80, 0x00,
0x00, 0x04, 0x00, 0x03, 0xF8, 0x0F, 0x00, 0x00,
0x00, 0x06, 0x00, 0x03, 0xF0, 0x18, 0x00, 0x00,
0x00, 0x07, 0x00, 0x01, 0xF0, 0x30, 0x00, 0x00,
0x00, 0x07, 0x80, 0x01, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x03, 0xC0, 0x01, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x03, 0xE0, 0x00, 0x00, 0x06, 0x00, 0x00,
0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00,
0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00,
0x00, 0x07, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00,
0x00, 0x0F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00,
0x00, 0x0C, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00,
0x00, 0x08, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x08, 0x00, 0x0F, 0xF0, 0x07, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x3F, 0x40, 0x0F, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x18, 0x80, 0x3F, 0x80, 0x00,
0x00, 0x00, 0x00, 0x01, 0x00, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x0F, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x1F, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0E, 0x23, 0xF0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0E, 0xC3, 0xE0, 0x00, 0x00,
0x00, 0x80, 0x00, 0x1F, 0x87, 0xC0, 0x00, 0x00,
0x00, 0xC0, 0x00, 0x1F, 0x8F, 0x87, 0x80, 0x00,
0x00, 0x70, 0x02, 0x0F, 0x9F, 0x0F, 0x80, 0x00,
0x00, 0x7C, 0x02, 0x0F, 0xBE, 0x1C, 0xE0, 0x00,
0x00, 0x3E, 0x04, 0x07, 0xFC, 0x18, 0xE0, 0x00,
0x00, 0x3E, 0x04, 0x03, 0xF0, 0x1B, 0xC0, 0x00,
0x00, 0x3E, 0x0C, 0x01, 0xE0, 0x1F, 0x80, 0x00,
0x00, 0x1C, 0x08, 0x03, 0xC0, 0x1F, 0x00, 0x00,
0x00, 0x18, 0x18, 0x07, 0x80, 0x7C, 0x00, 0x00,
0x00, 0x18, 0x38, 0x0F, 0x01, 0xFC, 0x00, 0x00,
0x00, 0x18, 0x30, 0x1F, 0x07, 0xDC, 0x00, 0x00,
0x00, 0x30, 0x70, 0x3F, 0x1F, 0x0C, 0x00, 0x00,
0x00, 0x30, 0x70, 0x7B, 0x38, 0x0C, 0x00, 0x00,
0x00, 0x30, 0xE0, 0xF3, 0x60, 0x0C, 0x00, 0x00,
0x00, 0x30, 0xE1, 0xE3, 0x00, 0x0E, 0x00, 0x00,
0x00, 0x71, 0xC3, 0xE3, 0x00, 0x3E, 0x00, 0x00,
0x00, 0x71, 0xC3, 0xC3, 0x00, 0x6E, 0x00, 0x00,
0x00, 0x73, 0x83, 0xC3, 0x00, 0xCE, 0x00, 0x00,
0x00, 0x77, 0x80, 0x07, 0x00, 0x9E, 0x00, 0x00,
0x00, 0x77, 0x80, 0x07, 0x00, 0x9C, 0x00, 0x00,
0x00, 0x7F, 0x00, 0x07, 0x00, 0x9C, 0x00, 0x00,
0x00, 0x7F, 0x00, 0x07, 0x00, 0xBC, 0x00, 0x00,
0x00, 0x7E, 0x00, 0x07, 0x00, 0xFC, 0x00, 0x00,
0x00, 0x7E, 0x00, 0x07, 0x00, 0xFC, 0x00, 0x00,
0x00, 0x7C, 0x00, 0x07, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x7C, 0x00, 0x06, 0x00, 0xDE, 0x00, 0x00,
0x00, 0xFC, 0x00, 0x06, 0x00, 0x5C, 0x00, 0x00,
0x01, 0xF8, 0x00, 0x06, 0x00, 0x78, 0x00, 0x00,
0x00, 0xF8, 0x00, 0x0E, 0x00, 0x78, 0xF8, 0x00,
0x00, 0xF8, 0x00, 0x0E, 0x00, 0xFF, 0xF8, 0x00,
0x00, 0x78, 0x00, 0x0E, 0x01, 0xFF, 0xB0, 0x00,
0x00, 0x70, 0x00, 0x06, 0x01, 0xF0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
char matarray16k[] = {
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x08, 0x60, 0x08, 0x00,
0x00, 0x0C, 0x03, 0xF0, 0x18, 0x50, 0x30, 0x90,
0x11, 0x70, 0x11, 0xA8, 0x14, 0x58, 0x18, 0xB0,
0x13, 0x70, 0x04, 0x8C, 0x03, 0x04, 0x00, 0x00,
/* 以下?'E? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0C, 0xFC,
0x3C, 0x88, 0x08, 0x88, 0x0E, 0x70, 0xF8, 0x18,
0x18, 0xE0, 0x1E, 0x20, 0x28, 0xF0, 0xC8, 0x20,
0x08, 0x3E, 0x09, 0xC0, 0x08, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x80, 0x00, 0x90, 0x0B, 0xE0,
0x0C, 0x00, 0x0B, 0xF0, 0x08, 0x40, 0x10, 0x80,
0x11, 0xFC, 0x1E, 0x88, 0x20, 0x80, 0x20, 0x80,
0x40, 0x80, 0x80, 0x80, 0x01, 0x80, 0x00, 0x80,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x40,
0x00, 0xC0, 0x10, 0x80, 0x10, 0x80, 0x1F, 0x00,
0x10, 0x00, 0x10, 0x00, 0x10, 0x04, 0x10, 0x04,
0x08, 0x06, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x02, 0x80, 0x04, 0x10, 0x07, 0xE0,
0x0C, 0xE0, 0x17, 0x80, 0x05, 0xC0, 0x06, 0xB0,
0x0B, 0x40, 0x08, 0x9C, 0x1F, 0xE0, 0x23, 0x40,
0x05, 0x30, 0x09, 0x1C, 0x31, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x03, 0x00, 0x01, 0x30, 0x01, 0x10,
0x01, 0x00, 0x01, 0xC0, 0x1E, 0x80, 0x10, 0x90,
0x12, 0x90, 0x1E, 0x60, 0x12, 0x60, 0x22, 0x60,
0x26, 0x92, 0x45, 0x0A, 0x00, 0x06, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x11, 0x18,
0x11, 0x0C, 0x21, 0x04, 0x21, 0x00, 0x01, 0x00,
0x07, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x08, 0x03, 0x08, 0x1E, 0x28,
0x0A, 0x48, 0x0F, 0xC8, 0x7A, 0x48, 0x0A, 0x08,
0x12, 0x18, 0x21, 0x08, 0x01, 0x40, 0x07, 0x80,
0x01, 0x00, 0x01, 0xF8, 0x3E, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x11, 0xF0,
0x02, 0x20, 0x04, 0x20, 0x62, 0x40, 0x29, 0x40,
0x10, 0x80, 0x11, 0x40, 0x22, 0x60, 0x64, 0x38,
0x78, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x01, 0x00, 0x01, 0x10, 0x11, 0xF8,
0x1E, 0x10, 0x20, 0xC0, 0x07, 0xC0, 0x00, 0x80,
0x01, 0x38, 0x1F, 0xC0, 0x20, 0x80, 0x00, 0x80,
0x00, 0x80, 0x00, 0x80, 0x01, 0x80, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x01, 0xF0,
0x0E, 0x80, 0x08, 0xF0, 0x0B, 0x00, 0x09, 0x40,
0x0A, 0x78, 0x13, 0xC0, 0x10, 0x7E, 0x2F, 0xC0,
0x20, 0x40, 0x40, 0x40, 0x00, 0x40, 0x00, 0x40,
/* 以下?'Q? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
0x7F, 0x40, 0x00, 0x20, 0x07, 0x20, 0x19, 0x20,
0x12, 0x20, 0x0E, 0x40, 0x00, 0x40, 0x00, 0x40,
0x00, 0x40, 0x00, 0xC0, 0x00, 0x40, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3D, 0x90,
0x24, 0x80, 0x24, 0x70, 0x25, 0x90, 0x25, 0x20,
0x35, 0xE0, 0x24, 0xA0, 0x24, 0xC0, 0x45, 0x42,
0x4E, 0x22, 0x88, 0x3E, 0x00, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x03, 0x00, 0x01, 0x30, 0x1F, 0xC0,
0x00, 0xA0, 0x0F, 0xA0, 0x0A, 0xA0, 0x0F, 0xE0,
0x09, 0x00, 0x03, 0xF8, 0x1E, 0x88, 0x17, 0xC8,
0x14, 0x88, 0x10, 0x70, 0x10, 0x10, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00,
0x00, 0x70, 0x07, 0x80, 0x18, 0x80, 0x01, 0x80,
0x05, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0xC0,
0x38, 0x70, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x08, 0x40, 0x0C, 0x40, 0x08, 0x40,
0x11, 0x40, 0x11, 0xF0, 0x32, 0x40, 0x50, 0x44,
0x91, 0xF8, 0x12, 0x40, 0x10, 0x40, 0x10, 0x40,
0x10, 0x40, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0C, 0x20,
0x08, 0x40, 0x10, 0x48, 0x1E, 0xFC, 0x23, 0x0C,
0x24, 0x8C, 0x3C, 0x48, 0x24, 0x08, 0x24, 0x08,
0x3C, 0x08, 0x00, 0x38, 0x00, 0x18, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
0x01, 0xE0, 0x0F, 0x00, 0x01, 0x00, 0x01, 0xC0,
0x0E, 0x40, 0x08, 0x80, 0x06, 0x80, 0x01, 0x00,
0x02, 0xC0, 0x0C, 0x78, 0x30, 0x1C, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20,
0x08, 0x70, 0x3C, 0x20, 0x08, 0x3E, 0x0F, 0xD0,
0x08, 0x1C, 0x3B, 0xF0, 0xC9, 0x10, 0x08, 0x90,
0x08, 0x10, 0x18, 0x10, 0x00, 0x30, 0x00, 0x00,
/* 以下?'q? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x11, 0x80,
0x00, 0x00, 0x00, 0x78, 0x27, 0x80, 0x71, 0x80,
0x21, 0x20, 0x22, 0xF0, 0x23, 0x10, 0x20, 0x00,
0x5F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
/* 以下?'? ?16炚w楷体_GB2312 字模Q?2 byte */
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0C, 0x38,
0x10, 0x40, 0x24, 0x00, 0x04, 0x1F, 0x0B, 0xF0,
0x18, 0x10, 0x28, 0x10, 0xC8, 0x10, 0x08, 0x10,
0x08, 0x10, 0x08, 0x70, 0x00, 0x20, 0x00, 0x00,
};
void drawFont(Graphics g) {
int i, j;
drawmat(yi12, g,12, 50, 20, 0xFFFFFF);
drawmat(er12, g,12, 50, 50, 0xFFFFFF);
drawmat(dian12, g,12, 50, 80, 0xFFFFFF);
drawmat(zhen12, g,12, 50, 110, 0xFFFFFF);
drawmat(song16, g,16, 50, 130, 0xFF0000);
drawmat(ti16, g,16, 50, 150, 0xFF0000);
drawmat(zi24, g,24, 50, 180, 0x0000FF);
drawmat(mo24, g,24, 50, 200, 0x00FF00);
drawmat(guan48, g,48, 50, 250, 0x0000FF);
drawmat(guan64, g,64, 50, 300, 0xFF0000);
// for (i = 0; i < 15; i++) {
// drawmat(matarray16k + i*32, g,16, 200 + i * 15, 200, 0xFFFFFF);
// }
// drawmat(matarray16k + 8*32, g,16, 200 + i * 15, 200, 0xFFFFFF);
// drawmat(matarray16k + 9*32,g, 16, 200 + (++i) * 15, 200, 0xFFFFFF);
// drawmat(matarray16k + 10 * 32, g,16, 200 + (++i) * 15, 200, 0xFFFFFF);
// for (i = 18; i < 25; i++) {
// drawmat(matarray16k + (i - 3) * 32, 16, 200 + i * 15, 200, 0xFFFFFF);
// }
}
void drawmat(char[] mat, Graphics g,int matsize, int x, int y, int color)
/*依次Q字模指针、点阵大、v始坐?x,y)、颜?/
{
int i, j, k, n;
n = (matsize - 1) / 8 + 1;
for (j = 0; j < matsize; j++) {
for (i = 0; i < n; i++) {
for (k = 0; k < 8; k++) {
if (!((mat[j * n + i] & (0x80 >> k)) == 0)) /*试?的位则显C?/
{
g.setColor(color);
g.drawLine(x + i * 8 + k, y + j, x + i * 8 + k, y + j);
// putpixel(x + i * 8 + k, y + j, color);
}
//else
// g.setColor(0xFFFFFF);
}
}
}
}
class FontCanvas extends Canvas {
protected void paint(Graphics g) {
g.setColor(0x0);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
drawFont(g);
}
}
}
]]>
import javax.microedition.lcdui.*;
*
*
*
*
*
*
*
*
* @author not attributable
* @version 1.0
*/
public class TestCanvas extends Canvas {
"分问题,但是另外一部分问题又冒出来了。下面我重点老讨个问题。希望大家有什么好的想法也说下。分享下l验Q让我少走弯路关于UIlgQ上下滚动,
qx滚动的视U技术探讨在我设计的UI中存在的两个问题一直没有解军_1.是焦点处理机?-
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
我重点老讨个问题。希望大家有什么好的想法也说下。分享下l验Q让我少走弯路于UIlgQ上下滚动,qx滚动的视U技术探讨在我设计的UI中存在的?
个问题一直没有解军_1.是焦点处理机?-
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
我重点老讨个问题。希望大家有什么好的想法也说下。分享下l验Q让我少走弯路sdf" +
"是焦点处理机?-
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
焦点处理机制--
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
焦点处理机制--
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
焦点处理机制--
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
焦点处理机制--
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
焦点处理机制--
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
焦点处理机制--
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下?
焦点处理机制--
q个问题已经在前几天我解决了?.是上下滚动Q^滑滚动,触摸屏滚动,实现的不是很到。虽然是解决了一部分问题Q但是另外一部分问题又冒出来了。下
";
private int sreenWidth;
private int sreenHeight;
private int scrollHeight;
private int scrollY;
private int regionY;
try {
this.sreenHeight = this.getHeight();
this.sreenWidth = this.getWidth();
}
catch(Exception e) {
e.printStackTrace();
}
}
g.setColor(0xFFFFFF);
g.fillRect(0,0,this.sreenWidth, this.sreenHeight);
char[] chars = text.toCharArray();
int h = 0;
int w = 0;
Font font = g.getFont();
g.setColor(0x00000);
for(int i=0; i
if(w > this.sreenWidth - 18){
h += font.getHeight();
w = 0;
}
g.drawChar(chars,w, h + this.regionY, Graphics.TOP | Graphics.LEFT);
w += font.charWidth(chars);
}
if(this.numHeight == 0)
this.numHeight = h+font.getHeight();
this.scrollY = (-this.regionY)*this.sreenHeight/numHeight;
g.fillRect(this.sreenWidth-6,0, 6, this.sreenHeight);
g.fillRect(this.sreenWidth-5,this.scrollY, 4, this.scrollHeight);
}
System.out.println(keyCode);
if(keyCode == -2){
if(this.sreenHeight - this.regionY > this.numHeight)
return;
this.regionY -= 30;
}
else if (keyCode == -1){
if(this.regionY>=0)
return;
this.regionY += 30;
}
this.repaint();
}
]]>
里面的内容包括:
关于我们
软g版本 0.0.1
此Y?span class="t_tag">源代?/span>Q以及相?span class="t_tag">文档版权?G视线所有,转蝲Q以及用作其他用途,h明来?G视线?部分版权归其?span class="t_tag">作?/span>所?/font>?/h3>
版权声明Q此E序包版?G视线所有,部分代码是从|络上收集回来,版权归他们所有,公布出来只是用于学习Q交之用,如需要进行商业开发,必须l过作者的同意Q否则追I法律责仅R?/font>
如果上面的程序有bugQ我们期待您的加?加入3G视线论坛 一起体验手Y件开发的快乐 功能描述:
版权声明Q此E序包版?G视线所有,部分代码是从|络上收集回来,版权归他们所有,公布出来只是用于学习Q交之用,如需要进行商业开发,必须l过作者的同意Q否则追I法律责仅R?/font>
如果上面的程序有bugQ我们期待您的加?/font> 加入3G视线论坛 一起体验手Y件开发的快乐 功能描述:
源代码下载到q里
http://www.3geye.net/bbs/thread-223-1-1.html
]]>
自己写的内存理工具c,支持单的垃圾回收
开发J2AVA ME E序最需要关注的是内存的占用Q开发性能高,适配多种机型的Y件不是gҎ的事情,我在国庆旉整理下我的开发思\写了q个c,l大家参考下
package com.gggeye.util;
import java.util.Hashtable;
import java.util.Stack;
import java.util.TimerTask;
import java.util.Vector;
import com.gggeye.demo.Logger;
/**
* 内存理Q工LQ主要是用于目的内存控Ӟ
* 此类相对重要点,因ؓ涉及到各个方面的内存回收
* 此类除了提供一些常用的Ҏq行回收外,q还提供一个自动回收的机制Q不q不采用Q自动回收机制是是当
* I闲内存于指定内存大小时候,释放内存Q回收的旉?U回收一?lt;br/>
* 创徏日期 2007-10-1
* @author wuhua
* <p><b>MSN </b> gggeye@hotmail.com
* <p><b>EMAIL</b> gooogledev@gmail.com </p>
* <p>|站支持 <a >http://www.3geye.net</a></p>
* <p>|站论坛 <a >http://www.3geye.net/bbs</a></p>
* <p>wuhua的博?<a >http://wuhua.3geye.net</a></p>
*/
public class MemoryManager implements Runnable {
/**
* 释放内存Q当内存于addtionMemory时候,q行垃圾回收Q主动回?br />
* @param addtionMemory
*/
public final static void release(long addtionMemory) {
long freeMemory = Runtime.getRuntime().freeMemory();
//如果I闲的内存小于指定的内存Q则回收
if(freeMemory<=addtionMemory){
Logger.println("回收前的内存==>" +MemoryManager.freeMemoryKByte());
System.gc();
Logger.println("回收后的内存==>" +MemoryManager.freeMemoryKByte());
}
}
/**
* 释放指定~存对象
* @param addtionMemory
* @param cache
*/
public final static void release(long addtionMemory, Object cache){
release(addtionMemory);
if(cache != null){
if(cache instanceof java.util.Hashtable){
Hashtable i = (Hashtable)cache;
i.clear();
}else if(cache instanceof java.util.Vector){
Vector i = (Vector)cache;
i.removeAllElements();
}else if(cache instanceof java.util.Stack){
Stack i = (Stack)cache;
i.removeAllElements();
}
cache = null;
System.gc();
}
}
/**
* 得到pȝI闲内存Q单位是k
* @return q回I闲内存的大?br />
*/
public final static String freeMemoryKByte(){
return freeMemoryByte()/1024 + "k";
}
public final static long freeMemoryByte(){
return Runtime.getRuntime().freeMemory();
}
private static MemoryManager instance ;
private static TimerTask task;
/**
* 自动回收内存机制,此方法,应该在系l第一ơ调用的时候调用,如果重复调用则会抛出异常
* @param time
*/
public static void autoGC(long time) throws java.lang.RuntimeException{
if(instance == null){
instance = new MemoryManager();
task = TimerTaskManager.getInstace().create(instance, time);
}else
throw new RuntimeException("GC is starting...");
}
public static void colse(){
if(instance != null) instance = null;
if(task != null){
task.cancel();
task = null;
}
}
/**
* 实现对内存的自动化管?br />
*/
public void run() {
//于12k内存的时候释攑ֆ?br />
release(1200000);
}
}
]]>
// run the game loop.
{
random = new
Random();
thread = new Thread(this);
thread.start();
}
// When the game canvas is hidden, stop the
thread.
{
thread = null;
}
Graphics g = getGraphics();
// Check user input and update positions if
necessary
int keyState = getKeyStates();
if ((keyState &
LEFT_PRESSED) != 0) {
sprite.move(-1, 0);
}
else
if ((keyState & RIGHT_PRESSED) != 0) {
sprite.move(1,
0);
}
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(), getHeight());
sprite.paint(g);
flushGraphics();
}
{
int w = getWidth();
int
h = getHeight() - 1;
while (thread ==
Thread.currentThread())
{
// Increment or decrement
the scrolling interval
// based on key presses
int
state = getKeyStates();
{
sleepTime += SLEEP_INCREMENT;
if
(sleepTime > SLEEP_MAX)
sleepTime =
SLEEP_MAX;
} else if ((state & UP_PRESSED) !=
0)
{
sleepTime -=
SLEEP_INCREMENT;
if (sleepTime < 0)
sleepTime = 0;
}
//
existing starfield down one and painting in
// new stars...
graphics.setColor(0, 0, 0);
graphics.drawLine(0, 0, w, 0);
graphics.setColor(255, 255,
255);
for (int i = 0; i < w; ++i)
{
int test = Math.abs(random.nextInt()) %
100;
if (test < 5)
{
graphics.drawLine(i, 0, i, 0);
}
}
flushGraphics();
{
Thread.currentThread().sleep(sleepTime);
} catch
(InterruptedException e)
{
}
}
}
* License
*
* Copyright 1994-2004 Sun Microsystems,
Inc. All Rights Reserved.
*
*/
import
javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
{
1);
{
}
{
if (c == exitCommand)
{
exitMIDlet();
}
}
throws
MIDletStateChangeException
{
exitMIDlet();
}
{
notifyDestroyed();
}
{
return display;
}
{
GameCanvas c = new
StarField();
c.addCommand(exitCommand);
c.setCommandListener(this);
}
{
}
{
if (display == null)
{
display =
Display.getDisplay(this);
initMIDlet();
}
}
}
/*
* License
*
* Copyright 1994-2004 Sun Microsystems,
Inc. All Rights Reserved.
*/
import javax.microedition.lcdui.*;
import
javax.microedition.lcdui.game.GameCanvas;
// a scrolling star
field. Use the UP and DOWN keys
// to speed up or slow down the rate of
scrolling.
{
{
super(true);
graphics.setColor(0, 0,
0);
graphics.fillRect(0, 0, getWidth(), getHeight());
}
{
int w = getWidth();
int
h = getHeight() - 1;
while (thread ==
Thread.currentThread())
{
// Increment or decrement
the scrolling interval
// based on key presses
int
state = getKeyStates();
{
sleepTime += SLEEP_INCREMENT;
if
(sleepTime > SLEEP_MAX)
sleepTime =
SLEEP_MAX;
} else if ((state & UP_PRESSED) !=
0)
{
sleepTime -=
SLEEP_INCREMENT;
if (sleepTime < 0)
sleepTime = 0;
}
//
existing starfield down one and painting in
// new stars...
graphics.setColor(0, 0, 0);
graphics.drawLine(0, 0, w, 0);
graphics.setColor(255, 255,
255);
for (int i = 0; i < w; ++i)
{
int test = Math.abs(random.nextInt()) %
100;
if (test < 5)
{
graphics.drawLine(i, 0, i, 0);
}
}
flushGraphics();
{
Thread.sleep(sleepTime);
} catch (InterruptedException
e)
{
}
}
}
// run the game
loop.
{
random = new
Random();
thread = new Thread(this);
thread.start();
}
// When the game canvas is hidden, stop the
thread.
{
thread = null;
}
}
]]>
在设计J2meE序中,如果c过大很Ҏ出?Maximum byte code length (32kB) exceededq样的问题,该怎么解决呢,办法很简单,把这个类 拆成几个类ok了?br />
?br />
]]>
JAVA MEq个技术出现到现在也有好多q了Q这D|_大家对这Ҏ术的褒贬不一。我们暂且不讨论q些Q我今天拿我做目的经验来说。该怎么栯计一ƾ优U的JAVA ME手机软g。这文章不是纯技术性的文章Q只要稍微做q项目的朋友都是可以看的明白了,里面的观点只是代码自q个h观点。说的不对的地方望大家多多指教?br />
首先我们来说说J2me的高UUI应用情况?
1Q?游戏Q根本就不采用高UUIQ用到的只是高UI调用本地输入法?br />
2Q?企业应用Q相对要求交互性高Q实时快Q用L面友好的应用来说Q高UUI的应用情况跟游戏查不?br />
3Q?单的例子教程Q更不就拿不出收的手YӞ大部分采用高UUIQ因为高UUI单方便,Ҏ描述?br />
lg所qͼ高UIҎ׃适合现在的企业应用,以及游戏开?br />
q方面的例子有UCWEBQ航家QFadato球客户端,Bobi球x工具QQQpd软gQ在U直播,手机׃软gQMino邮g客户端等{。。。这一pd证明高UI的应用不多。在q些pȝ里面用到最多的是软g的配|,输入法的调用Q错误的提示QAlertQ等
JSR规范制定的成功之处?br />
开发手Y件虽然没有开发电脑Y件工作量那么大,但是要考虑到的东西一炚w不比电脑软g,理由如下Q?br />
1Q?g配置q不如电?br />
2Q?操作pȝq于分散
JSR是Zq些差异而出现的?br />
用户可以通过查询api来查看自q手机是否之处q样的功能过Q而做出选择?br />
上面是废话。下面看看怎么栯计一Ƒ֥软g?br />
1Q?用户界面友好Q一套可定制的UIlg?br />
2Q?用户操作逻辑合理Q专业的{划l织
3Q?一套合理的内存理Q这h可以保证软g的稳定?br />
4Q?适应需求的软gl构模式?br />
5Q?性能斚w一定要好?br />
上面是一ƾY件基本的条gQ要惌q个软g被h们广泛解释的话,q需要解决下面的问题Q?br />
1Q?手机型号支持Q尽量匹配多U机型,在不能保证支持全部机型的条g下,最L支持L的手机厂商的手机
2Q?为各个机型定制一些特别的服务Q比如有些手机支持JSR75Q可以考虑保存更多的东西到本机手机上,有些不支持,可可以考虑用RMS{,有些支持媒体cd多点Q手Z也可以ؓq类手机定制多点服务
3Q?一Ƒ֥产品Q必L一个社区想扶持Q所以一个热门的产品C是少不了的?br />
4Q?个h感觉Q单机版的Y件不可能取得很大的成功,一定要采用C/S的方式来取得用户对品的_度
5Q?|马也不?天就可以建成的,所以Y件也不是一出来很完美Q所以就要不停的对Y件进行更斎ͼl护工作Q这是最重要的,好Y件的其中之一的标准就是看看这个Y件发展到什么版本了Q版本也高,证明你的软g的生命厉强
]]>
原文出处http://www.3geye.net/?uid-3-action-viewspace-itemid-111
对于自定义UI的设计,涉及到的工作量是很大的,有时候往往要实CUUI效果而花费大量的旉L考,找\子,然后实践Q运气好的话Q自然OKQ运气不好,那就很惨了。浪Ҏ_q没有效果?br />
不过q好有很多前辈ȝZ一些方法跟代码Q下面就让我们来看下Q?a href="javascript:;" onclick="javascript:tagshow(event, '%D1%D5%C9%AB%BD%A5%B1%E4');" target="_self">颜色渐变效果的实现吧。实践了q么Q感觉就q个代码比较好,颜色渐变的比较^滑。很舒服?br />
下面是效果图
* l制渐变色选择?br />
* @param g
* @param color
* @param x
* @param y
* @param width
* @param height
*/
public final static void drawShadeRect(Graphics g, int color, int x , int y, int width, int height){
int[] rgb = getShadeColor(color, width);
for (int by = y; by < y + 20; by += 4)
{
int nTemp = y + 20 - (by - y);
nTemp = nTemp>4 ? 4:nTemp;
g.drawRGB(rgb, 0, width, x, by, width,
nTemp, true);
}
}
/**
* 获取颜色渐变RGB数组Q?br />
* Z获取q个数据Q而又跟CLDC1.0兼容Q导致项目增加了一个Floatc?br />
* DE序变大
* @param width
* @return
*/
public final static int[] getShadeColor(int color , int width){
int[] rgb;
int shadeWidth = width;
int nRgbData = shadeWidth * 4;
rgb = new int[nRgbData];
int alpha = -127;
for (int i = 0; i < shadeWidth; i++)
{
alpha = -127 + i;
//主要法在这里?br />
int col = color | (128 - alpha << 24);
rgb[i] = col;
rgb[i + shadeWidth ] = col;
rgb[i + shadeWidth * 2] = col;
rgb[i + shadeWidth * 3] = col;
}
return rgb;
}
]]>
原文出处 3G视线 http://www.3geye.net/bbs/viewthread.php?tid=79
今天处理一个项目的时候,发现我台素爱K700C遇到一个超U奇怪的问题
K700C在采用Canvas 设计Q调用keyPressed(int keyCode)的时候,出现一?br />
Left Right按键的时候没有反应,也打CZ么结果?br />
应该来说Left=-6QRight= -7才对Q不q按下去却没有Q何放映;
考虑下是否全屏幕的问题:按照我的思考如?br />
1.非全屏状态下Q这两个键值是不给Canvas使用?br />
2.非全屏状态下Q这两个键g留给pȝ使用QCammondQ;
不过在全屏的状态下也出C一个问题?br />
问题如下Q?br />
1.可能获取Left QRight后,pȝ跛_
哈哈。终于找到问题所在了。原来是Canvas getKeyName(int keyCode)会抛出异常,而程序没有捕莯个异常,DE序出问题?br />
其中K500C也有同样的问题?img src ="http://www.tkk7.com/gooogle/aggbug/144651.html" width = "1" height = "1" />
]]>
前段日子我写?/span> J2ME Polish 全攻略之入门q篇文章。虽然写的不怎么P不过却是带了不少人入门?/span>
现在摘录|上的一D话来描q?/span>J2ME Polish现状
希望开始研I?/span>J2ME-POLISH先有点心理准?/span>
ui的问题多多,特别是他所支持?/span>CSS 没有说明是哪个版本的CSSQ有时让人挺qh的。但?/span>build工具q是不错的?/span>Build script写v来有点不像他文档中说的那么简单。我个h认ؓ新手不易
从上面的话可以看书,J2ME Polish虽火Q但是要x行v来,相关的入门,深入文档q是比不可以的。由于国人的习惯Q如果有比较好的中文文档Q对他们来说是最好的事情Q?/span>3G视线致力于这些工作,我们不是什么专业的作家Q只是记录下我们工作的经验,供大家一起学?/span>
今天我们看看J2ME Polish的配|文件的关系已经怎么样加入自q东西Q?/span>
比如加入自己的厂家规范,api规范{?/span>
看看J2ME Polish的配|目录结?/span>
安装J2ME Polish打开安装目录可以看到这些文?/span>
apis.xml -- 描述一些常用的讑֤JCP规范支持的库Q比?/span>MMAPI的描q啊{,
custom-css-attributes.xml -- 可ؓ自己?/span>GUIE序定制CSS样式
custom-devices.xml -- 自定义驱动,补充官方没有提供的驱动?/span>
devices.xml - - 定义所有已知的讑֤Q你可以定义或者修改这些已存在的规范和使用改变q的配置用在您的代码?/span>
groups.xml – 定义驱动l,每一个驱动可以在L一个组下面
vendors.xml - - 可自定义的厂?/span>J2ME规范
上面是一些配|的介绍Q要惛_?/span>J2ME Polish?/span>Build的功能,弄得他们的关pL很重要的?/span>
下面来定制我们需要的功能吧?/span>
首先我们来定义自q?/span>Apis以及VendorsQ?/span>
Vendors 我们定义一?/span>ID?/span>3Geye?/span>
Apis 定义一?/span> 3Geye/k700
然后?/span>bulid上改下:
<deviceRequirements>
<requirement name="Identifier" value="3Geye/k700"/>
</deviceRequirements>
W一步:
下面我们现在?/span>Vendors上看?/span>
我们拉到q个文g的底部,复制一?/span>VendorQ然后修改下Q就ok?/span>
<vendor>
<name>3Geye</name>
<capability name="JavaConfiguration" value="CLDC/1.0" />
<features>hasCommandKeyEvents</features>
<capability name="JavaConfiguration" value="CLDC/1.0" />
<capability name="keys.CommandKeys" value="21, 22, 23" />
<capability name="key.LeftSoftKey" value="21" />
<capability name="key.RightSoftKey" value="22" />
<capability name="key.MiddleSoftKey" value="23" />
<capability name="key.ChangeInputModeKey" value="48" />
<capability name="key.ChangeNumericalAlphaInputModeKey" value="35" />
<capability name="TextField.charactersKeyStar" value=" " />
</vendor>
q个是参?/span>moto修改?/span>
W二步:
修改devices
<device
supportsPolishGui="true" >
<identifier>3Geye/k700</identifier>
<features>isVirtual</features>
<groups>Series60</groups>
<capability name="OS" value="Symbian"/>
<capability name="JavaPackage" value="mmapi, wmapi, pdaapi " />
<capability name="JavaPlatform" value="MIDP/2.0" />
<capability name="JavaConfiguration" value="CLDC/1.0" />
<capability name="VideoFormat" value="3gpp" />
<capability name="SoundFormat" value="midi, amr" />
<capability name="Bugs" value="dateFieldAcceptsNoNullDate" />
</device>
q样我们定义了一?/span>3Geye/k700de device了,如果你扩展了apisQ你应该把扩展的ID
填入JavaPackageq个参数里面。我在上面添加了一?/span>pdaapiQ对jsr75的支持?/span>
然后试下?/span>
在这里可可以看到结果了?/span>
q些?/span>JBuilder2005试的结果?/span>
在这里我发现J2ME Polish 实不错。以后我会出一些更多关于它的文章,Ll关?/span>
目前国内支持JAVAq_l端详细资料Q资料帖Q?br /> http://www.everenter.com/bbs/dispbbs.asp?boardID=5&ID=205
目前国内支持JAVAq_l端详细资料
MIDP v2.0是由JCP(Java Community Process)制订的,该规范的制订是由大约50个公司共同参与设计参见附录一。MIDP v2.0规范设计的目的是定义一体系架构Q相应的APIsQ从而ؓW三方的Ud信息讑֤QMIDs〕应用的开发提供一开攄标准环境?
MIDP v2.0规范是在MIDP v1.0规范的基上设计的Q它保证了同MIDP v1.0的兼Ҏ。即在MIDP v1.0上编写的MIDlets能在MIDP v2.0上执行?
ҎJ2ME定义的体pL构,MIDP被设计在CLDC的基上运行。关于CLDC的资料可以参? http://jcp.org/jsr/detail/30.jsp.虽然MIDP v2.0规范是在CLDC1.0所提供的功能的基础上制订的Q但它仍能运行在CLDC1.1的基上,以及以后的更新版本。但我们希望MIDP v2.0的实现最好在CLDC1.1的基上?
?J2ME 架构Q?
Java?995q发明以来以发生了很大的变化Q从最早的为基于溜览器中运行的Applet的编E,? Servlet/EJB的Server~程Q再到现在的MIDlet为无U信息设备的~程。它已发展成Zؓ开发者提供一端到端编E开发的q_Q即我们常说 ? J2SE/J2EE/J2ME,Java的三个^?fig1)。由于无U编E有其完全不同于传统~程的特D性,比如Q运行设备的多样性,讑֤处理能力? 如服务器和微机,用户界面的差异性等。另外在加上无线技术的飞速发展,使得J2ME的体pL构有者完全不同于J2SE/J2EE的特炏V?
?: Java 的三个^?
J2ME的架构是把我们传l的Java架构Q硬?OS/JVM/APIs/应用加一变化Q变成了Q硬?OS/Configuration/Progile/应用。之所以采用这L架构是由我们上面所谈到的J2ME的特D性有兟?
?: J2ME的架?
J2ME/CLDC/MIDP作ؓJ2ME的一个版本,它是专ؓ无线Ud通讯讑֤说设计的Q在下面我们单介l它的体pL构。从下图中我们可以看刎ͼ
?: CLDC/MIDP架构
1.在CLDC之上有两cAPI:
QMIDP APIs: q些APIs正是MIDP v.0规范所要定义的APIs.
- OEM-specific APIs: MIDP规范所涉及的无UK讯讑֤多种多样Q因此它不可?涉及所有设?的需求。因此这一cȝAPIs是由OEM厂商提供以便讉K特定讑֤的特定功能。但Zq些APIs的应用可能不能在其它的MIDs讑֤上运行?br />
2.MID应用的种c:
QMIDP: 一个MIDP应用或称为MIDetQ它必需只用MIDP和CLDC规范中所定义的APIs。该cd用能在应是在MID讑֤上最常见的应用?br />
QOEM-specific: 一个OEM-specific的应用会使用一些不在MIDP中定义的PIs(OEM-specific classes) 。这些应用不能在不同的MIDs讑֤上运行?br />
QNative: 一个本地应用指用非Java语言~写的直接运行于讑֤操作pȝ之上的应用。在MIDP规范中不涉及OEM-specific和Native的应用?
?MID v2.0规范所涉及的范_
我们都知道无U信息设备(MIDs〕的功能多种多样。但MIDP规范q不是要对这些设备的所有功能都要加? 定义Qƈ提供APIs~程。相反MIDP v1.0和MIDP v2.0的专家组同意只针Ҏ通用q且成功实施的功能的需求制订相应的APIs。在MIDP v1.0中这些功能包括:
Q?应用的下?br />
Q?应用的生命周?br />
Q?端到端的传输(http)
Q?|络联结
Q?数据库存?br />
Q?计时?br />
Q?用户界面
通过用户对MIDP v1.0的用经验和反馈QMIDP v2.0的专家组在MIDP v1.0 APIs的基上又新加了下面的 APIs:
Q?应用的下载和计费
Q?端到端的安全传输(https)
Q?应用的数字签名和域的安全模式
Q?MIDlet的push注册(server push model)
Q?声音
Z上面所讲的同样的原因,一些功能是不会在MIDP的定义范围内Q这些功能包括:
Q?pȝ层的APIs: MIDP APIs的重Ҏ针对应用的开发者,而不是系l开发。因此一些底层的涉及pȝ接口的APIsQ比如无U信息设备的甉|理Q语音的~码模块属于系l层的APIs而不在MIDP所讨论的范围内?br />
Q?底层的安全:MIDP规范不涉及底层的安全的功能,它只使用CLDC所提供的底层的安全机制?
关于MIDP v2.0的新APIs在本文中我们不加以介l?
?MIDP v2.0的安全机Ӟ
我们知道Java语言作ؓ以种|络~程语言Q它h很多特点来满网l编E的需求,其中最Zh们所z|乐道 的是它的遍写一ơ到处运行,以及它的安全性。特别是它的安全性,从它的发明道现在?q的旉已经为无数的事实所证明。Java语言的安全性,安全机制? 有它发展的过E,下面我们单介l以下Java的安全机制?
1.Java1.0的沙机Ӟ
fig3: Java1.0安全的沙机?
上图所描述的是Java1.0的沙机Ӟ它最早是为在溜览器中q行的Applet所设计。因
Applet的运行代码是通过|络传输到用L机器中,Z防止恶意代码Q该机制把用户应用简单分为本地应用和|络应用(applet)。对|络应用它只
能放问一些安全的 APIs从而保证安全性。但该机制过于简单,无法很好满开发者的需求?
2.Java1.1的可信Q代码的安全机Ӟ
fig4: 可信M码的安全机制
该安全机制只是在Java1.0沙箱安全机制的基上,引入一U新的网l应用,及可信Q的网l应用,但ƈ未对所讉K的资源进行很好的划分。大家从图中可看出,应用要吗受沙qU束Q只能访问有限资源,要么p讉K所有资源?
3.Java1.2/2的域安全机制Q?
Java1.2/2的域安全机制
该安全机刉过配置文g对Java的应用以及访问的资源q行配置Q从而实C一U非常细化的安全机制?
4.MIDP安全机制及其发展Q?
MIDP1.0规范在制订时׃当时的无U网l尚处于发展阶段Q因此在考虑MIDP
v1.0的安全机制时没有太多考虑应用在网l传输过E中安全性的讄Q而是把重Ҏ在无U应用在讑֤上的q行q程中的安全性上。因此MIDP1.0规范?
q沙q安全机制来提供MIDlet
suiteq行时的安全性,该机制保证MIDlet所能调用的APIs不能讉K讑֤的敏感信息和功能。在MIDP2.0安全机制的制订过E中Q专家组采纳
了用户对MIDP v1.0安全机制所提出的意见:?.0版本的安全性太“?#8221;使得很多的无U设备的功能
不能通过MIDP的编E来加以使用。比
如说手机中地址本的讉K{。如果要把这些敏感功能的APIs开放让用户的应用访问,必d入一U新的安全机制。该机制是我们前面所描述?
Java1.2/2的域的安全机制。在MIDP v2.0中对不被信Q的MIDlet则只能运行于该沙安全机制中。Q何一UMIDP
v2.0的实玎ͼ必需支持非信ȝMIDlet的在MIDs讑֤上的q行?
MIDP2.0引入了信ȝMIDlet的新概念Q对于信ȝMIDlet它能使用一些敏感的和被限制使用 的APIs.当无U信息设备检到一MIDlet sute是可信QӞ则它对APIs的访问由相应的安全域的策略定义。我们将在下面的章节中详悉介l。当验证一MIDlet suite是否能信L发生错误Q则该MIDlet suite必需被拒l?br /> 执行?
5.MIDP2.0的域的安全机Ӟ
非信ȝMIDlet Suites
一非信ȝMIDlet suite是指MIDlet suite的下载源和JAR文g的完整性不能被下蝲的设备所信Q。对于非信Q的MIDlet suite必需只能q行于非信Q的安全域中,在该域中对受保护的APIs或功能不能访问或p备用者确定可以访问或不可以访问。Q何一MIDP1.0? 容的MIDlet suite能在MIDP v2.0的实C用非信Q的模式运行。对于非信Q的MIDlet suites它能讉K它的JAR manifest和application desctiptor文g以及下面的APIs:
Q?javax.microedition.rms
Q?javax.microedition.midlet
Q?javax.microedition.lcdui
Q?javax.microedition.lcdui.game
Q?javax.microedition.media
Q?javax.microedition.media.control
非信d全域对以下APIs或功能的讉K必须qL定可以或不可以:
Q?javax.microedition.io.HttpConnection
Q?javax.microedition.io.HttpsConnection
可信ȝ MIDlet Suite 的安全:
可信ȝ MIDlet Suite 的安全是建立在保护域的机制上。每一保护域定义了该域中的 MIDlet suite 的访问权限。该保护域的定义者可以定义设备怎样认和验证它能信ȝ MIDlet suite q把该域所允许和授权用的受保护的APIs和功能绑定给该MIDlet suite。设备所使用的验证和信QMIDlet suite的机制的定义是分开的,q样有利于h们根据设备,|络Q和商业模式的不同来q行选择。可信Q?MIDlet Suites使用X.509 PKI的签名和验证机制来确定一MIDlet suites的可信Q性?
在MIDP2.0的域的安全机制中Q大家主要回涉及以下概念Q?br />
保护域: 是MIDlet suite所允许的权限访问的集合
权限讉KQ?是指必须通过授权才能使用?APIs 或功?br />
信QMIDlet SuiteQ?指该MIDlet suite能通过验证q其JAR文g的完整性能被保证,q能被该讑֤上的某一保护域所信Q?br />
配置文gQ?一配置文g中包含许多域或别名的定义。每一域由包含所赋于的权限和用户操作所构成?
配置文g的例子:
domain: O= MIDlet Underwriters, Inc. , C=US
allow: javax.microedition.io.HttpConnection
oneshot(oneshot): javax.microedition.io.CommConnection
alias: client_connections javax.microedition.io.SocketConnection, javax.microedition.io.SecureConnection,
javax.microedition.io.HttpConnection,
javax.microedition.io.HttpsConnection
domain: O=Acme Wireless, OU=Software Assurance
allow: client_connections
allow: javax.microedition.io.ServerSocketConnection, javax.microedition.io.UDPDatagramConnection
oneshot(oneshot): javax.microedition.io.CommConnection
domain: allnet
blanket(session): client_connections
oneshot: javax.microedition.io.CommConnection
? ȝQ?
MIDP v2.0是ؓq大的开发者在无线Ud通讯讑֤上提供的一个开攄Javaq_Q它h开放性,通用性,以及比MIDP v1.0更强的安全功能。它是由全球U五十多家厂商所共同制定的,因此ZMIDP v2.0的应用在来回有很广泛的应用前景?
附录一QMIDP v2.0 的专家组:
公司Q?
4thpass Inc, AGEA Corporation, Alcatel, Aplix
Corporation, AromaSoft Corp, Baltimore Technologies CELLon France,
Distributed Systems Technology Centre, Elata PLC, Esmertec, Espial
Group Inc, France Telecom / Orange, Fujitsu Limited, German Aerospace
Center (DLR), Institute of Communications and Navigation, Hitachi
Ltd./Digital Media Group, In Fusio, J-PhoneEast Co. Ltd, Logica Mobile
Networks, Mitsubishi Electric Corp, Mobile Scope AG, Mobilitec,
Motorola, NEC Corporation, Nextel Communications Inc, Nokia, NTT
DoCoMo, Inc, Omnitel Pronto Italia S.p.A, One 2 One, Openwave Systems
,
Inc, Orange (UK), Palm, Philips Consumer Communications, Philips
Semiconductors, Research In Motion (RIM), Samsung Electronics Co., Ltd,
Sharp Labs, Siemens AG, Siemens ICM, Smart Fusion, Sony Ericsson Mobile
Communications, Sun Microsystems, Inc, Symbian Ltd, Telef'nica M'viles
Espa'a, Vaultus, Inc, Veloxsoft, Inc, Vodafone Global Platform &
Internet Services, Vodafone Group Services Limited, Vodafone
Multimedia, Zucotto Wireless,
个hQ?
Fabio Ciucci, Glen Cordrey, Jon Eaves, David Hook, Myank Jain, Neil Katin, Steve Ma, Ravi Reddy Wai Kit Tony Fung
文章出处 3G视线
q接 : http://javaeye.5d6d.com/thread-234-1-1.html
J2ME Polish 全攻略之入门
在看q篇文章之前Q我希望读者先览漫游 J2ME Polish--比较详细的文?/span>.doc q篇文章
内容?/span>
J2ME Polish现在很火Q很多手Y件开发商都在采用q东西进行二ơ开发。然后很可惜Q网l上关于q方面的中文比较,所以我Ҏ我学习的l过Q整理成文章Q希望对初学着以及爱好者有所帮助?/span>
1Q?span style="font-family: 宋体;">到官?/span>http://www.j2mepolish.org/ 上下载安装包Q现在最新版本是2.0 R4版本Q本人徏议安?/span>1.2.4版本Q因?/span>2.0R4版本可能存在一些不兼容以及一?/span>bug。本人用2.0R4版本的时候,有些例子q不能通过试
q行cmdQ然后输?/span>java –jar D:"J2ME Polish.jar卛_出现提示H口Q然后点下一步,?/span>ok了?/span>
上面的目录结构很清晰?/span>
其中最import是系l引入的包,其中包括一?/span>bulid的包Q以及其他一些,midp{规范包?/span>
Samples 是例子文Ӟ我的版本里面只有两个例子Q一个是menuQ描q的是,采用J2ME Polish GUIQ创建适合各个q_的统一外观的包Q基?/span>CSS设计的。是UI设计的典范,可以具体研究?/span> Sysinfo是一个系l信息的试例子Q涵盖了几乎所有^C?/span>jcp规范支持{测试信息,是我们开发程序中必须要用到的知识?/span>
Doc是文档,此文档暂没有中文。我们学习v来比较吃?/span>
Api?/span>J2ME Polish提供l开发h员用的公共接口
Bin一些可执行文g
其中readme.txt文g,关于目的一些描q?/span>
LICENSE.txt 版权信息,作ؓ商业开发?/span>,一定要看哦
对于目录下的xml文g,基本上都?/span>J2ME Polish的描q文Ӟ很重要的哦。是研究它的最直接的资料,可惜Q我也是刚学习,没有深入M解它
其中groups.xml定义了不同的q_下面的东西,比如s40Q?/span>s60Q?/span>s80Q?/span>390Q等api{?/span>
Vendors.xml定义了厂商的规范Q特性等Q比如键值的定义啊?/span>J2ME Polish处理键g件的时候主要是对这些规范进行预~译Q所以适合很多q_Q厂商?/span>
Devices.xml是对各个q_支持规范E度的描qͼ此文件包含了很多个^台支持描q?/span>
上面的所有配|都是基?/span>xml了。可以自己扩展,apiQ配|,以及q_
三.q行例子MenuQ?/span> SysInfo?/span>
2Q查?/span>bulid.xml文gQ看看它做了些说明手机,让我们的工作q么L愉快
׃?/span>xml文gQ?/span>wordq没有进行格式化Q所以我q里重点介绍下?/span>
<project name="enough-j2mepolish-example" default="j2mepolish">
q段是说Q徏立一?/span>projectQ?/span>默认执行?/span>target?/span>j2mepolish?/span>
<property name="wtk.home" , value="D:"WTK22" />
WTK的安装目?/span>
<property name="polish.home", value="D:"Program Files"J2ME-Polish" />
J2ME Polish 的安装目?/span>
<taskdef name="j2mepolish"
classname="de.enough.polish.ant.PolishTask"
classpath="${polish.home}/import/enough-j2mepolish-build.jar" border="0">{polish.home}/import/jdom.jar
" border="0">{polish.home}/import/proguard.jar
" border="0">{polish.home}/yguard-lib.jar
{wtk.home}/wtklib/kenv.zip"/>
q个很重要,定义说。执行这?/span>targer?/span> TaskQ这里是指执?/span>de.enough.polish.ant.PolishTaskq个cR具体可以看源代码,看看里面做了些说明手?/span>
<obfuscator name="ProGuard" useDefaultPackage="true" unless="test" >
<!--
You can set additional parameters here, e.g.:
<parameter name="optimize" value="false" />
-->
</obfuscator>
q个用来打包用的Q采?/span>ProGuardh?/span>
其他的自qI?/span>
我们现在来看看,q行build.xml后生成了些什么呢。不看不知道Q一看吓一跻I
?/span>build的文件夹下面Q我发现了好多文Ӟ全部是对于^C同的资源源代码。原来,J2ME-Polish的原理是Q通过ant build的扩展,然后通过自己的一?/span>APIQ把用户的代码{换成对应各个q_的源代码Q然后编译,打包。原理虽然简单,但是q一套却是要花很多功?/span>ide哦。我现在开始有点佩?/span>J2ME Polish的创意了。也难怪,我的ȝ?/span>J2ME Polish是个好东西,好以后l学?/span>J2ME Polish的源代码Ql探讨?/span>
上面的例子是ZJ2ME – Polish GUI的,现在的例子是?/span>importM?/span>J2ME Polish MIDP相关?/span>APIQ这样例子对应需要开发。这个例子更单,按照我刚才所写的Ҏ办即可?/span>
Z介绍下这个例子,q个例子对应开发手Y件来_也是很有用的。里面包含了?/span>JSR规范支持的测试,已经屏幕Q按键等相关的测试,很有用?/span>
{1E0DF53D-767F-4C53-93F1-74D307C3E874}0.jpg | |
描述: |
|
文g大小: | 17 KB |
看过? | 文g被下载或查看 161 ?/font> |
![]() 下蝲 |
{58DB28A3-11CB-4F4A-B864-B9282BF44468}0.jpg | |
描述: |
|
文g大小: | 13 KB |
看过? | 文g被下载或查看 65 ?/font> |
![]() 下蝲 |
{D1C1BED4-7807-4D6A-A6E5-832166EC8ADA}0.jpg | |
描述: |
|
文g大小: | 10 KB |
看过? | 文g被下载或查看 59 ?/font> |
![]() 下蝲 |
刚才在我的Q里面讨Z下关于Wap Explorer的开发。里面的朋友我把开发的q程写到blogQ以方便学习与讨论。现在我把我写好的代码公布出来。ƈ说明我的设计l构。(在此说明下,对于里面的UI设计我前面写q很多文章) 一个UI包-Q包括了所有的界面实现接口{,Wap的显CZ主要是通过q个包里面的东西划出来的?br> 里面有两个核心的东西QPartQ-控g接口Q?PanelQ-Form接口?br> 比如链接,TextFielQSoftButton{都是PartQ?弹出H口QFormPanel都是Panel?br> 一个Wap引擎。这部分未实玎ͼ{大家参考。我参考过jxml{开源的东西Q觉得基本上可以实现自己的功能,不过我还是想和大家写一个,一来可以相互学习提高。二来也可以多了解下关于xmlQ这斚w我很菜)?br> 一个网l连接引擎-Q主要是下蝲数据用的?br> 一个RMS包。主要是用来保存用户数据的?br> 对了。在源代码里之看wuhua包下面的p了,其他的都是一些网站找来的代码 q里q有个问题是Q怎么样可以Wap引擎跟UI跟网l连接引擎很好的l合呢?br> 提出一些参考: 1Q一边下载,一边解释,一ҎC(q是最完美的方案,比如firefox是q样Q这样对操作有大量图片资源的时候有很好的体验。我们可以先昄出文字,然后在一边下载图片?br> 2Q全部下载完在解释,昄Q相对与上面的方案来_q是比较Ҏ的。但是显CZ很慢。给用户造成很不好的体验?br> q有很多的其他要求。。。。。。。?/font> |
d10月䆾左右Q个人开发了一个球即时YӞ在此构徏的一个uiQ加上一些解释wml的一些项目,军_把两者组合v来,开发一可用的浏览器Q?-- q就是最此的x?/font>
l过大概一个月左右旉实现了下Q然后发布出来,但这个浏览器q不是一个可用的东西?/font>
q个是Z么有q个开发日志的由来Q我惛_接下来的旉里,对它q行二次开发,q行重构?/font>目开发日?
5?3日,
1Q?昨天q行软g的时候,发现出现了很多问题,1Qwml解释慢了点,2Q打开一些异常的url会出现程序崩溃,3QY件运行久了就会出现内存溢出?
2Q?今天重点解决的是wml解释引擎优化Q网l下载优化等
3Q?恩?
对了。你有没有研Ihttp下蝲速度问题
比如你获取input然后Q读取长度,然后在对长度q行分割Q同时启动线E对那些分割q行下蝲Q这样速度会快很多
4Q?不过如果设计的好的话Q同时启?个线E去d数据到是可以的,特别是读取图片的时候,一定要同时开?个线E去dQ不然的话,慢啊
5Q?关闭所有日志输出可以快很多。比如我打开日志输出输掉是解释一个比较大的wml?U,关闭的话0.8U左叻I不过q个日志的输出,量比较大Q?
6Q?在采用kxml解释引擎的时候,发现kxml下蝲|络数据的时候,会丢失数据包Q所以解释的时候,wml变了形状Q甚x出现异常情况Q导致程序崩溃,所以今天要解决的问题是自己实现下蝲机制Qƈ采用多线E的技术进行下载?
7Q?
5?2日,
8Q?今天重点重构一个下载进度条Q但是这个下载进度条要h性化一炏V怎么做了Q上|去找下有没有这斚w的资?
9Q?下蝲q度条搞定,不过Q很可惜Q设计的不怎么好看。这个问题也解决了,q度条也好看多了
10Q?开始设计Cokie跟缓存功能,设计初期遇C困难Q出现cache死锁问题?
链接支持打电话的功能了
5?1日,
11Q?l箋修正了一些bugQ给字体的标{进行解释?
12Q?今天l字体加了个解释颜色的功能,比如标记<big color=”fff”>Fox</big>可以实C同样式的字体了。哈
13Q?实现了一个打电话的功能,发短信,发彩信的功能
14Q?写了一个help的wml跟main.wml哈哈Q我可以成功的解释这些wmlQ?
15Q?q没实现的功能有inputQselectOption跟img{标?
16Q?重构了一个关于退Z件的方式Q决定采用时间链的Ş式,l一个class传入一个事件代?
17Q?链接支持打电话的功能了
5?0日,
18Q?今天重构了WapPage的设计,虽然主页不够完美Q比如有些标记支持的不好Q但是这个是kxml解释引擎的事情,q有一个解决了问题是可以支持,用户查看状态的问题了,q差一个下载状态的UIQ不q应该很单?
19Q?重构了MainPage的设计,设计成从wml文g中读取数据然后显C出?
20Q?整天惌些东西真的很烦恼
5?9日,
1Q?今天是礼?Q我很开心,昨天晚上回到Ӟ搞定了WapPage的一些重构,不过q差很多Q比如关于浏览下拉页面的时候,一个状态条表示Q用L动作Q下载进度条。等{,今天重点是重构下下来q度状态跟用户事g的完善?
2Q?l前几天搞定Kxml解释wap出错的bug后,昨天晚上有对kxml解释引擎q行?
的重构,使之能解释更多的wml标记Qƈl制出来?
3Q?今天修改了日志输出方式。这h易于调试?
4Q?
今天下午陪女朋友去逛了下街Q广州今天下雨,回来把一些想好了Q但未能实늚做了下,感觉q不错,WapPage重构的差不多了,Kxml解释引擎也差
不多了。现在忙于下载那些wml文gq行本地调试Q还出差一个下载进度条Q本惛_一个ajax常用的进度的Q不q苦于没有gif囄分割Q而我又对gif
不熟悉。哈
5Q?功能修正了许多?
5?8日,
6Q?今天的Q务是重点重构UIQ要求是Q每个UI都能C自己的位|?
7Q?重点重构WapPageq个UIQ之可以管理其他UI部g
5?6日,
1Q?发现了kxml解释引擎在解释wml时候的一个bugQ详l看源代?
2Q?重构了StringPart UIlgQ之可以自动换行。这个功能已l重构完?
3Q?重构WapPage部gQ这个部件很关键Q是把所有的Part UIl装hQ所以说q个部g也是所有Part UI的ManageQ设计的好,可以很容易做好统一理Q事件处理,资源释放跟绘制管理等
4Q?发现了一个很严重的bugQؓ什么我用kxml解释wml的时候,会对一个tag重复的解释两ơ呢。找到问题的所在了Q这个ƈ不是kxml的bugQ而是自己的疏忽,把函数放错了位置。现在问题解决了
1Q?nbsp; 今天重构WMLParserQ之不已mainform耦合。经q?0多分钟的努力l于重构完毕q个斚w的功?/p>
2Q?nbsp; 下面可能要设计一个把wml转换成stringQ用于保存网늚功能Q比如把string保存到rms?/p>
3Q?nbsp; |上看了下,Z整理下手机的各个参数的支持..
4Q?nbsp; l于搞定了系l属性的查看,发现E序q行一D|间后,内存不段上升.实是有内存瓉,得努力改q?/p>
明天跟以后的旉打算设计一个文本解释引擎,是从文本中解释然后再绘制成控gQ主要是用来保存|页
l于球目告一D落Q期间学辛苦Q无奈与成长都是可写的?
在此期间我让UI折腾的紧Q甚xl想攑ּQ终I是坚持下来了。想惛_一个小的屏幕上设计一个UI已经是很痛苦的已l事情,何况在pc上设计,真是佩服M那些高手们?
最q,旉比较有空Q所以把UI修改了下Q然后在此基上+jsr75规范做了个电子书阅读软g。等我设计好了以后,打算开源,大家共同学习Q虽然写的不好,各位高手多指教。现在发布一些读取手机目录的Ҏ?