扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:51CTO.com整理 来源:51CTO.com 2007年9月4日
关键字:
在本页阅读全文(共3页)
private Image[] loadFrames( String name, int frames ) return images; |
你也可以传递一个Canvas对象(可选),和一个剪辑列表(clip list)。如果你指定了一个canvas和使用一个timer来自动更换到动画的下一帧,就如下面的例子代码中一样,canvas在动画向前滚动以后自动被重画(repaint)。不过这样的实现办法是可选的,你可以这样做,也可以让程序选择合适的时候重画canvas。
因为MIDP 1.0不支持透明的图片,AnimatedImage 类使用一个剪辑列表来模拟透明的效果,剪辑列表是图片被剪成的方块区域的系列。图片被画出来的时候分开几次,每次画一个剪辑列表里面的剪辑区域。剪辑列表在帧的基础上被定义好,所以你需要为图片的每一帧创建一个数组。数组的大小应该是4的倍数,因为每一个剪辑面积保持了四个数值:左坐标,顶坐标,宽度以及高度。坐标的原点是整个图片的左上角。需要注意的是使用了剪辑列表会使动画慢下来。如果图片更加复杂的话,你应该使用矢量图片。
AnimatedImage类扩展了java.util.TimerTask,允许你设定一个timer。这里有个例子说明如何使用timer做动画:
Timer timer = new Timer(); AnimatedImage ai = ..... // get the image timer.schedule( ai, 200, 200 ); |
每隔大约200毫秒,timer调用AnimatedImage.run()方法一次,这个方法使得动画翻滚到下一个帧。现在我们需要的是让MIDlet来试试显示动画!我们定义一个简单的Canvas类的子类,好让我们把动画“粘贴上去”。
import java.util.*; // A canvas to which you can attach one or more public class AnimatedCanvas extends Canvas {; public AnimatedCanvas( Display display ){; // If the canvas is not double buffered by the if( !isDoubleBuffered() ){; // Add an animated image to the list. public void add( AnimatedImage image ){; // Paint the canvas by erasing the screen and then protected void paint( Graphics g ){; if( offscreen != null ){; g.setColor( 255, 255, 255 ); int n = images.size(); if( g != saved ){; |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者