1、创建使用触摸屏的 Java ME 程序杨建强摘要: 介绍了 Canvas 类中可用于捕获触摸屏事件的方法, 创建了一个类似于 iPhone 手机上的图片浏览程序。关键词: Java ME; Canvas1 Canvas 类Canvas 类位于 javax.microedition.lcdui 包中, 它提供了低级屏幕和图像操作方法。该类自身是抽象类, 使用的时候需要给出具体的实现。Canvas 中最重要的方法是 paint (Graphics g),它完成图像的实际绘制。当然, 在这里 paint () 方法并不是重点, 感兴趣的是其他 5 个方法, 它们可用于创建使用触摸屏的 Java ME
2、 程序。这些方法包括hasPointerEvents ()、hasPointer-MotionEvents ( ) 、pointerDragged ( int x, int y) 、pointerPressed(int x, int y), 以及 pointerReleased (int x, int y)。这 5 个方法最初被用于处理具有指点能力的界面也即用户能够使用指点设备与这样的界面交互。不过, 在具有触摸功能的非指点设备上, 这些方法工作得一样好。当发生指点事件时, 也即按下、释放和拖动指点设备时,系统会分别调用pointerPressed (int x, int y) 、pointe
3、rReleased(int x, int y) 和 pointerDragged (int x, int y) 方法, 此时, 参数 x、y 中存有指点事件发生时指点所在的坐标。因此, 可以利用这些方法获得指点所在的位置, 并根据需要完成相应的操作。注意, 系统对这些方法的调用是串行的, 也即系统从不在前一个调用方法返回之前调用另一个方法。方法hasPointerEvents() 检查设备是否支持指点按下和释放事件。当 has-PointerEvents () 返回 true 时, 意味着设备支持 pointerPressed(int x, int y) 和 pointerReleased (
4、int x, int y) 方法。方法 has-PointerMotionEvents () 检查设备是否支持指点移动事件。当hasPointerMotionEvents () 返回 true 时, 意味着设备支持 pointerDragged(int x, int y) 方法。2 利用 Canvas 创建触摸屏图片浏览器有了前面的基础, 现在来创建一个类似于 iPhone 手机上的触摸屏图片浏览器。首先,让先看一下程序运行时的屏幕截图, 从而搞清楚要实现的效果是什么。如图 1 显示Java ME 程序启动后加载的图片, 以及稍微向左拖动或滑动该图片后的效果。图 1 刚加载的图片(左) 和向左
5、稍微滑动之后的图片(右)顺便说一下, 使用 Java ME SDK 3.0 作为测试平台, 并选用DefaultFxTouchPhone1 作为目标模拟器。因此, 给出的屏幕截图来自于电脑上运行的模拟器。当然, 在模拟器只能使用鼠标来代替手指。选择的图片比屏幕的尺寸要宽一些, 为的是创造出图片滚动的效果。在实际设备上, 当手指在屏幕上左右滑动时, 程序会根据滑动的距离显示出当前图片的剩余部分, 或者显示出前一幅或下一幅图片。图片刚加载时剩余部分位于屏幕右侧。程序是这样设置的, 如果水平滑动的距离少有 20 个点(像素),将显示出当前图片的剩余部分。如果滑动的距离超过 20 个点,则显示前一幅或
6、下一幅图片(分别对应向左、向右滑动), 如图 2 所示。要达到的效果就是通过手指的滑动来逐个显示图片库中的图片。图 2 刚加载的图片(左) 和向左(或向右)滑动超过 20 个点之后的图片(右)知道了想要的结果, 现在来看一看完成上述任务的 Canvas 类的代码。public class BrowseImageCanvas extends Canvas private boolean scroll = false;private int currentImage = 0;private Image images; / 存放多个图片,相当于图片库private int pressX, relea
7、seX, dragX = 0;public BrowseImageCanvas() / 启动时加载图片,这里加载 3 个图片images = new Image3;images0 = Image.createImage(“/flower0.jpg“);images1 = Image.createImage(“/flower1.jpg“);images2 = Image.createImage(“/flower2.jpg“);protected void paint(Graphics g) g.setGrayScale(255);g.fillRect(0, 0, getWidth(), getH
8、eight(); / 清屏if (scroll) / 滚动当前图片g.drawImage(imagescurrentImage, -dragX, 0,Graphics.LEFT | Graphics.TOP);scroll = false;return;if (pressX releaseX) / 向左滑动,显示前一幅图片currentImage-;if (currentImage 20) / 滑动距离超/过 20 个点加载新图片repaint();protected void pointerDragged(int x, int y) /在这里/决定是否滚动图片int deltaX = pre
9、ssX - x;if (Math.abs(deltaX) getWidth() dragX += deltaX;if (dragX imageWidth) dragX= imageWidth - getWidth();scroll = true;repaint();程序中, pointerPressed ( ) 、pointerReleased ( ) 、pointer-Dragged () 方法设置各种参数, paint () 利用这些参数来决定是否滚动当前图片或显示新图片。在pointerPressed () 方法中,保存了用户触摸位置的 x 轴坐标, 然后, 在pointerReleas
10、ed ()和 pointerDragged () 方法中确定用户手指沿水平方向移动的距离大小(deltaX)。如果移动超过 20 点, 则显示新图片, 否则就沿 x 轴方向卷动图片。可以左右两个方向移动。当然, 为了简化问题, 程序忽略了沿 y 轴方向的移动。3 结语自 Java ME 诞生以来, 它就已经具备了满足触摸屏界面的能力, 只是那些提供 Java ME 实现的设备制造商没有跟上步伐。介绍了 Canvas 类中的能够捕获触摸屏上指点运动的接口,并以一个类似于 iPhone 手机上的图片浏览程序来演示其使用方法。希望能够起到抛砖引玉的作用, 启发读者写出更加实用的触摸屏 Java 程序。
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。