#blackberry
#ежевика
Вопрос:
Я видел только несколько вопросов, связанных с BlackBerry, но я думаю, что осведомленные участники просто скромны 🙂
Вопрос в том, что я внедряю пользовательский менеджер. Все замечательно, за исключением прокрутки (в моем случае она горизонтальная). Вот часть моего кода:
public class TemplateSelect extends Manager {
public static int THUMBNAIL_WIDTH = 150;
public static int THUMBNAIL_HEIGHT = 150;
private int width, height, lastX, sx;
public TemplateSelect(int w, int h) {
super(Manager.HORIZONTAL_SCROLL);
width = w;
height = h;
}
public int getPreferredWidth() {
return width;
}
public int getPreferredHeight() {
return height;
}
protected void sublayout(int width, int height) {
// Adding templates
int top = 0, left = 0, deltaLeft = 0;
for(int i = 0; i < getFieldCount(); i ) {
Template t = (Template) getField(i);
layoutChild(t, 0, 0);
setPositionChild(getField(i), deltaLeft left, top);
if (left THUMBNAIL_WIDTH > Display.getWidth()) {
left = 0;
if (top THUMBNAIL_HEIGHT * 2 > getPreferredHeight()) {
deltaLeft = getPreferredHeight();
top = 0;
} else {
top = THUMBNAIL_HEIGHT;
}
} else {
left = THUMBNAIL_WIDTH;
}
}
setExtent(getPreferredWidth(), getPreferredHeight());
}
protected boolean touchEvent(TouchEvent message) {
if (message.getEvent() == TouchEvent.DOWN) {
// Save down click location
lastX = message.getGlobalX(1);
sx = lastX;
} else
if (message.getEvent() == TouchEvent.UP) {
Template t = (Template) getFieldWithFocus();
int delta;
if (lastX - message.getGlobalX(1) > 0) {
delta = t.getX() getPreferredWidth();
} else {
delta = t.getX() - getPreferredWidth();
}
Template next = (Template) getField(getFieldAtLocation(delta, t.getY()));
if (next != null) {
next.setFocus();
} else {
Dialog.inform("NULL");
}
} else
if (message.getEvent() == TouchEvent.MOVE) {
lastX = sx;
setHorizontalScroll(getHorizontalScroll() sx - message.getGlobalX(1), true);
System.out.println(getHorizontalScroll());
sx = message.getX(1);
}
return false;
}
}
Я вызываю setHorizontalScroll, после этого немедленно проверяю его значение, но оно остается равным нулю ( и прокрутка не происходит.
Чего я не учел? В чем может быть проблема?
Заранее спасибо за любую помощь.
Ответ №1:
Я решил проблему, разбив свой компонент на страницы и поместив их в HorizontalFieldManager
Ответ №2:
setHorizontalScroll(getHorizontalScroll() sx - message.getGlobalX(1), true);
Второй аргумент для true активирует анимацию. Таким образом, он не может сразу получить ожидаемый объем прокрутки.
Если вы пишете для OS 6 и 7, я бы посоветовал использовать стандартное поведение прокрутки и активировать ваш код TouchEvent с помощью препроцессоров
Комментарии:
1. Как я могу разрешить стандартное поведение прокрутки? Дело в том, что если я унаследовал от VerticalFieldManager — прокрутка в моем коде работает, но в то же время неправильно работает макет.