2010-04-27 64 views
0

現在,我試圖找出如何實現以下內容:黑莓定製幻燈片式BitmapField經理

假設我有一個大約有10個左右BitmapFields以水平方式奠定了一個自定義管理器(類似於HFM中包含的幻燈片)。我想要實現的是能夠通過touchEvent水平移動圖像HFM,其中BitmapField將聚焦在自定義管理器的左側。換句話說,我必須給setHorizo​​ntalScroll一個值,如果是這樣,當用戶發出左或右觸摸事件時,是否只是遞增該值?另外,當HFM通過touchEvent橫向滾動時,如何在屏幕上的給定位置(即HFM上最左邊的場)獲得場的焦點?

回答

0

1 - 是的,setHorizo​​ntalScroll應該工作,不要忘記使用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); 
    } 
} 
+0

那麼你的意思是,對於每一個給定的BitmapField,我應該使用該字段的內容矩形(即Extent),然後當getX和getY屬於它的HFM左邊的那個Field的矩形時,我應該增加setHorizo​​ntalScroll?有沒有可能提供一個touchEvent代碼示例,其中您有一個包含BitmapFields的HFM,以及當BitmapField的Extent位於其父級HFM的左側時,如何使用getX和getY? – 2010-04-29 14:59:59

+0

當然,請參閱更新 – 2010-04-30 19:45:20

+0

嘿馬克斯,感謝您的代碼。我開始理解如何通過手指來檢測HFM和它的BitmapField,因爲從它的外觀來看,它將從HFM的左側和頂側獲得任何字段。但是,假設我有10個,並且我有一個索引值設置爲根據水平滾動上下移動的BitmapField的總數,我想通過定義的聚焦區域從HFM的水平中心獲取它們寬度可以包含我的BMF。使用字段寬度和我的焦點區域寬度的差異來創建XYPoint就足夠了嗎? – 2010-05-01 17:54:50