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

众所周知不同的手机机型不同的品牌对于的硬件能力是不同的,这里给出如何在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

 

  

 

     

 

 

   

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值