今天任务:加入about选项介绍软件功能及相关信息;增加暂停、翻页功能
进行之前先修正一个bug吧。就是显示第一个屏幕的时候在屏幕的下侧汉字出现叠加现象并且不是一行一个!其实昨晚就发现了,但太晚了,me要休息,所以就放下了。问题应该出在首次生成坐标和字符数列的时候,浏览源码,嘿嘿,果然如此。用全局变量height来限定对数列的规则填充,改为stars.length,ok。该死的东东,可见根据数列进行判断的重要性!
增加暂停功能是为了让用户有机会去请教别人或者查字典,呵呵。翻页功能则是屏幕自动下移的速度太慢,用户可能早早看完了想向下看时等的着急。闲言少叙,转入正题。其实很简单,设定按键的动作就行了,需要对keyPressed、pointerPressed进行操作。暂停的时候不再生成新的坐标和字符数列就行了;按键方面考虑到部分机器不支持触摸设备,对按键也进行了定义:触摸动作和确定键是个开关,按一下暂停,再按继续;向下的键则生成新的一屏显示内容制造下翻的效果;向上的键、左右的键都不定义任何动作;其它任何键都和确定键一样是个开关。
看这代码一天长过一天,还是不再使用内部类了吧。update到cvsrepository后,把Canvas内部类拆离成单独的类。
不过说实话,内部类如果不是太大难以维护的话,还是有不少便利,比如变量的共用等。
???初步设想设置一个全局变量pause(boolean)用于控制是否暂停,在pointerPress中反转pause的值。在scroll方法(更新数列)检查pause,如果为真则不更新数列,如果为假则更新。结果测试不行,第一次点击的时候有作用,屏幕停了下来,再次点击屏幕却再也不重新移动!
一时没有想明白,就采用了简单的方法,把暂停和继续的功能设定在不同的键上。考虑用户操作习惯,对以上构思做了调整:上键、左键、点击屏幕,暂停移动;下键、右键,翻屏(也就是显示完全不同的下一页内容);确定键、键盘其它任意键,继续屏幕移动。为了支持翻屏,把原来放在构建器中初始化坐标数列和字符数列的内容单独设置为一个方法,方便翻屏调用。调试,通过。
!!!初始化屏幕画底色时一般容易写成 g.setGrayScale(255);g.fillRect( 0, 0, width, height);其实第二句写为g.fillRect( 0, 0, width - 1, height - 1);才是正解。少画那条不必要也不能显示的线me也不知道能提高多少系统性能,但节约了资源是肯定的,毕竟手机、pda都是cldc嘛,节约一点是一点。
在屏幕上打水印时因为内容有三行,me的语句是这样的:
//在屏幕中央打上水印,呵呵
g.setGrayScale(191);
g.drawString("garden.eoooo.com", width/2, height/2-(fonth*3)/2, g.BASELINE|g.HCENTER);
g.drawString("后花园", width/2, height/2-fonth/2, g.BASELINE|g.HCENTER);
g.drawString("heart5", width/2, height/2+fonth/2, g.BASELINE|g.HCENTER);
使用setGrayScale是因为它比setColor要少写两个参数,再说也不是所有的手机都支持彩色,比如motorola A388,写成setColor纯属浪费,再说me这个《汉字知多少》基本是针对388之类的黑白灰度屏幕开发的,呵呵。而191是离纯白255最近的灰度级别,只是淡淡的有一点痕迹,毕竟是水印嘛。
!!!看到BASELINE又想到了前面调试的错误,忿,再强调一次:string只支持BASELINE,image只支持HCENTER,千万不要错咯。
???再来说drawString的定位,其中fonth是字体高度,意思很明显,屏幕中间一行,紧接着上面一行,下面一行。在motorola j2me Launchpad上测试正常,水印位于中央,但是在NetBean中用从wrk导入的DefaultColorPhone测试却位于屏幕上侧,明显偏上,不知道什么原因?