1 - 是的,setHorizontalScroll應該工作,不要忘記使用HORIZONTAL_SCROLL管理器構造
2 - 嘗試測試每場getContentRect()爲EventTouch getX(int)和getY(int)
UPDATE
爲簡化全球現場位置計算,請使用
public XYPoint getGlobalXY(Field field) {
XYPoint result = new XYPoint(field.getLeft(), field.getTop());
if (field.getManager() != null) {
result.translate(getGlobalXY(field.getManager()));
}
return result;
}
線程安全的消息對話框:
public void showMessage(final String message) {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.inform(message);
}
});
}
示例代碼:
class Scr extends MainScreen {
HorizontalFieldManager hfm;
public Scr() {
add(new LabelField("asdfsad"));
hfm = new HorizontalFieldManager(HORIZONTAL_SCROLL);
for (int i = 0; i < 5; i++) {
Bitmap bmp = new Bitmap(100, 100);
Graphics g = Graphics.create(bmp);
g.setFont(g.getFont().derive(100));
String txt = String.valueOf(i);
int x = g.getFont().getAdvance(txt);
g.drawText(txt, x, 0);
BitmapField bf = new BitmapField(bmp);
hfm.add(bf);
}
add(hfm);
}
protected boolean touchEvent(TouchEvent message) {
if (message.getEvent() == TouchEvent.CLICK) {
int x = message.getX(1);
int y = message.getY(1);
XYRect r = hfm.getExtent();
r.setLocation(getGlobalXY(hfm));
if (r.contains(x, y)) {
XYRect rf = hfm.getField(2).getExtent();
rf.setLocation(getGlobalXY(hfm.getField(2)));
if (x < rf.x) {
showMessage("left side");
} else if (x > rf.X2()) {
showMessage("right side");
} else {
showMessage("field");
}
}
}
return super.touchEvent(message);
}
}
那麼你的意思是,對於每一個給定的BitmapField,我應該使用該字段的內容矩形(即Extent),然後當getX和getY屬於它的HFM左邊的那個Field的矩形時,我應該增加setHorizontalScroll?有沒有可能提供一個touchEvent代碼示例,其中您有一個包含BitmapFields的HFM,以及當BitmapField的Extent位於其父級HFM的左側時,如何使用getX和getY? – 2010-04-29 14:59:59
當然,請參閱更新 – 2010-04-30 19:45:20
嘿馬克斯,感謝您的代碼。我開始理解如何通過手指來檢測HFM和它的BitmapField,因爲從它的外觀來看,它將從HFM的左側和頂側獲得任何字段。但是,假設我有10個,並且我有一個索引值設置爲根據水平滾動上下移動的BitmapField的總數,我想通過定義的聚焦區域從HFM的水平中心獲取它們寬度可以包含我的BMF。使用字段寬度和我的焦點區域寬度的差異來創建XYPoint就足夠了嗎? – 2010-05-01 17:54:50