Blackberry自定义幻灯片样式位图字段管理器
现在,我正试图找出如何实现以下功能:Blackberry自定义幻灯片样式位图字段管理器,blackberry,touch,blackberry-storm,Blackberry,Touch,Blackberry Storm,现在,我正试图找出如何实现以下功能: 假设我有一个自定义管理器,它有大约10个左右的位图字段以水平方式排列(类似于HFM中包含的幻灯片)。我想要实现的是能够通过touchEvent水平移动图像HFM,其中位图字段将聚焦在自定义管理器的左侧。换句话说,我是否必须给setHorizontalScroll一个值,如果是这样的话,当用户进行左键或右键触摸事件时,只需增加该值即可。此外,当HFM通过touchEvent横向滚动时,如何获得屏幕上给定位置内的字段焦点(即HFM上最左侧的字段)?1-是的,se
假设我有一个自定义管理器,它有大约10个左右的位图字段以水平方式排列(类似于HFM中包含的幻灯片)。我想要实现的是能够通过touchEvent水平移动图像HFM,其中位图字段将聚焦在自定义管理器的左侧。换句话说,我是否必须给setHorizontalScroll一个值,如果是这样的话,当用户进行左键或右键触摸事件时,只需增加该值即可。此外,当HFM通过touchEvent横向滚动时,如何获得屏幕上给定位置内的字段焦点(即HFM上最左侧的字段)?1-是的,setHorizontalScroll应该可以工作,不要忘记在manager构造函数中使用 2-尝试测试每个字段的EventTouch和 更新 要简化全局场位置计算,请使用
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);
}
}
class Scr扩展主屏幕{
水平现场经理hfm;
公共Scr(){
添加(新LabelField(“asdfsad”);
hfm=新的HorizontalFieldManager(水平滚动);
对于(int i=0;i<5;i++){
位图bmp=新位图(100100);
Graphics g=Graphics.create(bmp);
g、 setFont(g.getFont().derivate(100));
String txt=String.valueOf(i);
int x=g.getFont().getAdvance(txt);
g、 drawText(txt,x,0);
位图字段bf=新位图字段(bmp);
hfm.add(bf);
}
添加(hfm);
}
受保护的布尔touchEvent(touchEvent消息){
if(message.getEvent()==TouchEvent.CLICK){
intx=message.getX(1);
int y=message.getY(1);
XYRect r=hfm.getExtent();
r、 设置位置(getGlobalXY(hfm));
if(r.包含(x,y)){
XYRect rf=hfm.getField(2.getExtent();
设置位置(getGlobalXY(hfm.getField(2));
if(xrf.X2()){
showMessage(“右侧”);
}否则{
显示消息(“字段”);
}
}
}
返回super.touchEvent(消息);
}
}
那么您的意思是,对于每个给定的位图字段,我应该使用该字段的内容rect(即Extent),然后当getX和getY位于该字段HFM左侧的rect之下时,我应该增加setHorizontalScroll?您是否有可能提供一个touchEvent代码示例,其中有一个包含位图字段的HFM,以及当位图字段的范围位于其父HFM的左侧时,我如何使用getX和getY?嘿,Max,谢谢您的代码。我开始理解如何让手指检测HFM和它的位图字段,因为从它的外观来看,它将从HFM的左侧和顶部得到任何字段。但是,假设我有10个,并且我有一个索引值设置为位图字段的总数,这些字段根据水平滚动上下移动,我想通过一个定义的焦点区域从HFM的水平中心获取它们,该区域的宽度包含我的BMF。使用字段宽度和我的焦点区域宽度之差创建XYPoint是否足够?换句话说,在屏幕上该条带中显示的所有位图字段中,如何将当前显示的位图字段居中?可以使用field.getExtend()和Manager.getVisibleWidth()为了找出哪个字段在中间,也许最好在HorizontalFieldManager之前和之后放一些箭头按图像滚动图像。如果你点击一些位图字段,只需将其居中,无论滚动到哪个字段。