Сохранить массив изображений URL и текущий индекс изображения. Поместите BitmapField на экран. Добавьте пункты меню для Next / Prev. При следующей загрузке растрового изображения из увеличенного URL-адреса индекса установите для него значение BitmapField и отключите экран. В предыдущей сделайте то же самое с уменьшенным индексом.
- Вы также можете использовать кнопку (возможно, в шторм), но меню обязательно
- загрузка изображений в отдельных потоках (особенно если они хранятся в сети)
- Вы можете реализовать кэширование (в памяти приложения или путем сохранения изображений на устройстве хранения)
- некоторые текстовые поля могут быть полезны (имя файла, тип, размер, размеры и т. Д.)
UPDATE
Для этого вы можете использовать ScrollChangeListener
попробуйте этот код:
class Scr extends MainScreen implements ScrollChangeListener {
static int mRowNumber = 0;
public Scr() {
getMainManager().setScrollListener(this);
//preload some images on the start
for (int i = 0; i < 20; i++) {
mRowNumber = i;
add(new BitmapField(downloadBitmap(), FOCUSABLE));
}
}
public static Bitmap downloadBitmap() {
Bitmap result = new Bitmap(200, 80);
Graphics g = new Graphics(result);
g.drawRect(0, 0, 200, 80);
g.drawText("row #" + String.valueOf(mRowNumber), 30, 30);
return result;
}
public void scrollChanged(final Manager manager, int newHorizontalScroll,
int newVerticalScroll) {
int testBottomScroll = manager.getVirtualHeight()
- manager.getVisibleHeight();
if (testBottomScroll == newVerticalScroll) {
mRowNumber++;
(new Thread(new Runnable() {
public void run() {
// simulating download
Bitmap bitmap = downloadBitmap();
// update ui in thread safe way
addBitmap(bitmap);
}
})).start();
}
}
public void addBitmap(final Bitmap bitmap) {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
getMainManager().add(new BitmapField(bitmap, FOCUSABLE));
}
});
}
}
PS Проблема с этим подходом в том, что вы сможете перехватить событие прокрутки, только если на экране достаточно изображений. Попробуйте использовать Screen.navigationMovement (int, int, int, int) затем. И не забудьте протестировать его с помощью треквила и сенсорного экрана.
Кстати, я считаю, что было бы лучше загрузить все изображения одновременно, используя некоторую очередь потоков (таким образом, изображения будут загружаться асинхронно без блокировки интерфейса пользователя)