Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry自定义幻灯片样式位图字段管理器_Blackberry_Touch_Blackberry Storm - Fatal编程技术网

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之前和之后放一些箭头按图像滚动图像。如果你点击一些位图字段,只需将其居中,无论滚动到哪个字段。