您的位置:首页 > 其它

别了j2me-->系统原理之低级api 与低级事件

2011-09-02 17:21 260 查看
众所周知不同的手机机型不同的品牌对于的硬件能力是不同的,这里给出如何在Kjava中判断你的机型到底支持些什么能力。然后具体讨论一下底层的三种事件,

即:①:屏幕事件 ,②: 按键事件 , ③:绘图事件



此图对应的方法可以在啊Canvas中找到!

①:屏幕事件

查看Canvas的源码可以看到对于屏幕事件会有这么几个函数: showNotify() , hideNotify() , sizeChanged(int w, int h) , setFullScreenMode(boolean);

与我们的屏幕事件息息相关!

讨论一: 这里首先讨论困扰大家的问题:高级界面和低级界面到底能不能共享同一Display的问题 ??

一般的回答是高级界面和低级界面不能共享的,其实这是错误的回答。但是也并不是所有的高级控件都可以和低级控件放在一起使用的!

这里列出可以和低级界面一起使用的控件如下:

标题(Title)、走马灯(Ticker)以及Command





这里可以看到Canvas和Ticker 结合在一起的时候的画面! 主要代码(Title和command同理):

Ticker ticker = new Ticker("I'm ticker .....");

setTicker(ticker); (详见后面实例代码)


其实这个情况也可以理解,为什么setFullScreenMode(boolean);会存在

讨论二 : sizeChanged(int w, int h) 这个什么时候会出现呢 ?

这个函数是屏幕尺寸发生改变的时候会调用的。具体一般有这几种情况 : 第一次初始化的时候 ; setFullScreenMode(boolean); 的时候 ; 横屏与竖屏切换的时候 ; 这里给出实例重要代码(详见后面实例代码)

protected void sizeChanged(int w, int h) {
System.out.println("sizeChanged : w = " +w + " h = " + h );
super.sizeChanged(w, h);
}
}

结果 :

MyCanvas2

sizeChanged : w = 240 h = 291

sizeChanged : w = 240 h = 309

讨论三 :showNotify() , hideNotify() 与屏幕同在

当我们第一次显示Canvas的时候系统会调用showNotify()  这个通知应用程序管理器来显示这个Canvas ,当来电,短信等需要覆盖当前Canvas的时候需要调用hideNotify() 这个方法来隐藏 ! (详见后面实例代码)

protected void showNotify() {
System.out.println("NotifyCanvas2--->showNodtify");
super.showNotify();
}
protected void hideNotify() {
System.out.println("NotifyCanvas2--->hideNotify");
super.hideNotify();

结果:

NotifyCanvas1-->NotifyCanvas1

NotifyCanvas1-->showNodtify

NotifyCanvas1-->paint

NotifyCanvas2--->MyCanvas1

NotifyCanvas2--->showNodtify

NotifyCanvas1-->hideNotify

NotifyCanvas2--->paint

②:按键事件

  通常产生一个按键事件后,需要调用一次repaint()进行屏幕重绘。特别是使用了serviceRepaints()强制重绘时,一定要在按键处理后再进行重绘以避免出现奇怪的现象。

MIDP里头提供两种方法getGameAction()和getKeyCode()让程序在处理键盘时更有移植性。选用任何一种方法都可以达到跨平台的目的。但是有所差异:getGameAction()当用户按下“上”或“2”时,此函数都有可能传回响应到Canvas.UP,属于多对一的方法;getKeyCode()只能传入几种定义好的返回值,返回唯一。可以按照需要进行选用,而从多样性的角度出发也可以直接使用函数传入的keyCode值,但是这样做在移植时就需要花费较大的精力在按键值的处理上。

触控屏幕事件处理在用hasPointerEvents()函数和hasPointerMotionEvents()函数询问系统后,处理起来的方式和按键事件基本一致,这里就不再复述了。

③:绘图事件

   这里不讨论paint(Graphics)函数本身。因为这个本身的绘制是系统调用的,如果作为程序员来讲可以自行调用,而调用又又几种方式。接下来一一讲解

1 : repiant () :简单调用重绘整个屏幕

2 : repaint(x, y, width, height) :重绘指定区域

3 : serviceRepaints() :强制重绘 ,(当你的绘图操作比较多的时候,而且又要让绘制结束了才处理逻辑的时候非常有用,他可以确保你的绘图是完全的)

今天讨论的问题比较多,如果全部把代码贴上来看上去会很累,所以代码没有全部贴上,这里给出打包链接!http://download.csdn.net/source/3570130
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: