2010-04-27 1 views
0

, 나는 다음을 구현하는 방법을 알아 내려고 노력하고있어 HFM에 포함 된 슬라이드 쇼와 유사). 내가 원하는 것은 BitmapField가 커스텀 매니저의 왼쪽에 초점을 맞출 터치 이벤트를 통해 이미지 HFM을 가로로 움직일 수 있다는 것입니다. 즉, setHorizontalScroll에 값을 지정해야하며, 그렇다면 사용자가 왼쪽 또는 오른쪽 터치 이벤트를 만들 때 해당 값을 증가시키는 것입니다. 또한 HFM이 touchEvent를 통해 옆으로 스크롤 할 때 화면의 주어진 위치 (예 : HFM의 가장 왼쪽 필드)에서 Field의 포커스를 어떻게 얻을 수 있습니까?블랙 베리 사용자는 현재 슬라이드 쇼 스타일 BitmapField 관리자

답변

0

1 - 예, setHorizontalScroll는

2 관리자 생성자에서 HORIZONTAL_SCROLL를 사용하는 것을 잊지 마세요 작동합니다 - EventTouch getX(int)getY(int)

UPDATE 각 필드 getContentRect()을 테스트하려고

글로벌 현장 위치 계산을 단순화하기 위해

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를 들어, 내가 사용하는 것이 그 필드의 내용 RECT (즉, Extent) getX와 getY가 HFM의 왼쪽에있는 해당 Field의 rect 아래에 있으면 setHorizontalScroll을 증가시켜야합니까? BitmapFields가 포함 된 HFM이있는 곳에서 TouchEvent 코드 샘플을 제공 할 수있는 기회가 있습니까? BitmapField의 Extent가 부모 HFM의 왼쪽에있을 때 getX 및 getY를 사용할 수있는 방법은 무엇입니까? –

+0

확실, 업데이트 참조 –

+0

안녕하세요, 코드를 보내 주셔서 감사합니다. 나는 HFM을 감지하는 손가락을 얻는 방법을 이해하기 시작했고, 그 모습에서 HFM의 왼쪽과 위쪽의 필드를 얻으므로 BitmapField라고합니다. 그러나 10 개가 있다고 가정하고 수평 스크롤에 따라 위아래로 이동하는 총 BitmapField 수를 인덱스 값으로 설정하고 정의 된 포커스 영역을 통해 HFM의 가로 중앙에서 가져 오려고했습니다 내 BMF를 포함 할 너비가 있습니다. 필드 너비와 초점 영역 너비의 차이를 사용하여 XYPoint를 만들겠습니까? –