0

我正在着手创建一个天气模型显示工具(Web 应用程序),从我所见,我真的很喜欢使用 Google Web Tools 的想法,尤其是 SmartGWT 工具包。在这一点上,我最大的问题是找到某种方法来创建一种图像“循环器”(一个接一个地显示特定“集合”中的所有图像,与幻灯片放映不同)。作为参考,我需要与此类似的功能(至少在基本级别上):http ://rapidrefresh.noaa.gov/hrrrconus/jsloop.cgi?dsKeys=hrrr:&runTime=2012053007&plotName=cref_sfc&fcstInc=60&numFcsts=16&model=hrrr&ptitle= HRRR%20Model%20Fields%20-%20Experimental&maxFcstLen=15&fcstStrLen=-1&resizePlot=1&domain=full&wjet=1(尽管它当然不必完全一样)。

有谁知道(理想情况下)某种可以进行图像循环的 GWT 模块?或者,如果不是,即使我以前从未明确使用过 GWT,这听起来是否像中级程序员可以轻松解决的问题(我愿意接受挑战)?我确信我可以拼凑出一些东西,当它通过一个循环时,它会拉入每个图像,但预取它们会更加理想。

如果您需要澄清任何事情,请发表评论!

4

1 回答 1

1

据我所知,没有预制解决方案可以做到这一点,尽管 SmartGWT 可能有一些我不知道的东西。无论如何,自己动手都不会太难。这里有一些代码可以帮助您入门:

public class ImageLooper extends Composite {
    // List of images that we will loop through
    private final String[] imageUrls;

    // Index of the image currently being displayed
    private int currentImage = 0;

    // The image element that will be displayed to the user
    private final Image image = new Image();

    // The Timer provides a means to execute arbitrary
    // code after a delay or at regular intervals
    private final Timer imageUpdateTimer = new Timer() {
        public void run() {
            currentImage = (currentImage + 1) % images.length;
            image.setUrl(imageUrls[currentImage]);
        }
    }

    // Constructor. I'll leave it to you how you're going to
    // build your list of image urls.
    public ImageLooper(String[] imageUrls) {
        this.imageUrls = imageUrls;

        // Prefetching the list of images.
        for (String url : imageUrls)
            Image.prefetch(url);

        // Start by displaying the first image.
        image.setUrl(imageUrls[0]);

        // Initialize this Composite on the image. That means
        // you can attach this ImageLooper to the page like you
        // would any other Widget and it will show up as the
        // image.
        initWidget(image);
    }

    // Call this method to start the animation
    public void playAnimation() {
        // Update the image every two seconds
        imageUpdateTimer.scheduleRepeating(2000);
    }

    // Call this method to stop the animation
    public void stopAnimation() {
        imageUpdateTimer.cancel();
    }
}

这个实现的一个恼人的事情是你无法知道你的图像列表何时完成加载。Image.prefetch在这里没有回调可以帮助您。

于 2012-05-30T21:23:51.430 回答