Android与J2ME区别之我见(3)
16lz
2022-05-01
这一回该说到Android与J2ME下,作为自定义绘制的UI呈现所必不可少的组成部分——图像。
如果你在J2ME下做过手机游戏,尤其是那种横版过关型的,就少不了从资源文件里生成Image对象,然后用该死的graphics.drawImage(Image,int,int,int)等一系列方法将图像绘制到指定的位置。Android虽然漂亮N多,但是这种事情也不能幸免——它的canvas.drawBitmap(Bitmap,int,int,Paint)就是做这个用的。
乍一看这两个东西好像又没什么区别了,至少在绘制方面又如出一辙。的确如此,但是天下没有两片同样的树叶,更何况是两个class。仔细一看,Image与Bitmap的对象,在构造上还是有着很大的区别的。
先来看J2ME,Image类没有公开的构造函数,但是有一大堆静态的creatImage()方法,这N多种重载能让你从文件名、数据流、已经构造好的Image对象甚至字节数组里创建出Image对象来,创建出来你就能用了,还算挺方便的。但是Android则不然,它那个Bitmap类,若要从资源文件构造,可麻烦得要死,请看代码:
Resourcesr = getResources();
Bitmapboard = Bitmap.createBitmap( 240 , 240 ,Bitmap.Config.ARGB_8888);
Canvasc = new Canvas(board);
DrawabletempBoard = r.getDrawable(R.drawable.board);
tempBoard.setBounds( 0 , 0 , 240 , 240 );
tempBoard.draw(c);
这段代码是在Activity里面调用的,Resources只是说明我们的Bitmap是从资源文件里面构造的,并没有其他的特别之处。可以看到,Bitmap与Image一样,也没有通过构造函数而是通过静态方法得到了它的实例(这一点和Image类是一样的)。Bitmap.createBitmap(int,int,Bitmap.config)方法只是创建了一个空的Bitmap对象(这个空不是空指针null,有些类似于空字符串"",至少我是这么理解的),然后通过Canvas类(这是Android的Canvas类,不是J2ME的)的构造方法,将Bitmap对象传递进去,再利用Drawable.draw(Canvas)方法把Drawable对象(已经很接近资源文件了)画到Canvas上,这样才让Bitmap与资源文件夹drawable里的png之类的图像文件套上关系……
这个过程好麻烦哦,说好听的是Bitmap难以高攀,说不好听的就是脱了裤子放屁。J2ME一步到位的事情,它做了三步,虽说不怎么复杂,但是为什么这么做估计只有google知道。
实例创建好了,也初始化过了,于是能用了,说起来Bitmap在用法上还是很灵活的,能给好多地方使用,而且跟J2ME的Image用法极为相似,这点挺让人满意的。
对这两个类的比较就到这里了,下一次来比较一下J2ME与Android在响应按键输入以及触摸屏事件方面的异同。
谢谢!
如果你在J2ME下做过手机游戏,尤其是那种横版过关型的,就少不了从资源文件里生成Image对象,然后用该死的graphics.drawImage(Image,int,int,int)等一系列方法将图像绘制到指定的位置。Android虽然漂亮N多,但是这种事情也不能幸免——它的canvas.drawBitmap(Bitmap,int,int,Paint)就是做这个用的。
乍一看这两个东西好像又没什么区别了,至少在绘制方面又如出一辙。的确如此,但是天下没有两片同样的树叶,更何况是两个class。仔细一看,Image与Bitmap的对象,在构造上还是有着很大的区别的。
先来看J2ME,Image类没有公开的构造函数,但是有一大堆静态的creatImage()方法,这N多种重载能让你从文件名、数据流、已经构造好的Image对象甚至字节数组里创建出Image对象来,创建出来你就能用了,还算挺方便的。但是Android则不然,它那个Bitmap类,若要从资源文件构造,可麻烦得要死,请看代码:
Resourcesr = getResources();
Bitmapboard = Bitmap.createBitmap( 240 , 240 ,Bitmap.Config.ARGB_8888);
Canvasc = new Canvas(board);
DrawabletempBoard = r.getDrawable(R.drawable.board);
tempBoard.setBounds( 0 , 0 , 240 , 240 );
tempBoard.draw(c);
这段代码是在Activity里面调用的,Resources只是说明我们的Bitmap是从资源文件里面构造的,并没有其他的特别之处。可以看到,Bitmap与Image一样,也没有通过构造函数而是通过静态方法得到了它的实例(这一点和Image类是一样的)。Bitmap.createBitmap(int,int,Bitmap.config)方法只是创建了一个空的Bitmap对象(这个空不是空指针null,有些类似于空字符串"",至少我是这么理解的),然后通过Canvas类(这是Android的Canvas类,不是J2ME的)的构造方法,将Bitmap对象传递进去,再利用Drawable.draw(Canvas)方法把Drawable对象(已经很接近资源文件了)画到Canvas上,这样才让Bitmap与资源文件夹drawable里的png之类的图像文件套上关系……
这个过程好麻烦哦,说好听的是Bitmap难以高攀,说不好听的就是脱了裤子放屁。J2ME一步到位的事情,它做了三步,虽说不怎么复杂,但是为什么这么做估计只有google知道。
实例创建好了,也初始化过了,于是能用了,说起来Bitmap在用法上还是很灵活的,能给好多地方使用,而且跟J2ME的Image用法极为相似,这点挺让人满意的。
对这两个类的比较就到这里了,下一次来比较一下J2ME与Android在响应按键输入以及触摸屏事件方面的异同。
谢谢!
更多相关文章
- Android支持HTML标签
- Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
- [置顶] Android实现数据存储技术集锦
- 《Android(安卓)群英传》 阅读笔记 第一章~第三章
- Java事件模型与Android事件模型的比较
- 从零学Android(十二)、Android中的图形和动画之属性动画
- 浅谈Java中Collections.sort对List排序的两种方法
- 类和 Json对象
- Python list sort方法的具体使用