2011-01-31 3 views
0

맞춤 ListFieldCallback을 사용하여 BlackBerry 애플리케이션 용 ListField를 구현했습니다. 두 가지 문제를 제외하고는 잘 작동합니다.BlackBerry의 테두리 그리기 ListField

먼저 지정된 비트 맵은 첫 번째 행에만 드로잉됩니다. 다음 행에 그리지 않습니다 (단, 텍스트는 괜찮습니다).

둘째, 현재 선택한 ListField 요소 주위에 파란색 테두리를 그립니다. 이렇게하기 위해, ListField의 drawFocus()를 무효로 만들도록 재정의했으며 navigationField() 메서드에서 ListField를 invalidate()로 설정했습니다. 테두리는 첫 번째 행에 그려지지만 다른 행에는 그려지지 않습니다. 왜 그럴 수 있니?

의 ListField 인스턴스화 :

ListField lf = new ListField() { 
      protected void drawFocus(Graphics graphics, boolean on) { 
      } 

      protected boolean navigationMovement(int dx, int dy, 
        int status, int time) { 
       this.invalidate(this.getSelectedIndex()); 
       return super.navigationMovement(dx, dy, status, time); 
      } 
      protected boolean navigationClick(int status, int time) { 
       return true; 
      } 
     }; 

     lf.setEmptyString("No items.", DrawStyle.HCENTER); 
     _callback = new ListCallback(vector, Bitmap 
       .getBitmapResource("image.png")); 
     lf.setCallback(_callback); 
     add(lf); 

     lf.setSize(vector.size()); 

사용자 정의의 ListField 콜백 :

if (index == list.getSelectedIndex()) { 
     g.setColor(0x4096cc); 
     g.drawBitmap(5, (bitmapHeight - fontHeight) * 2, 
       _bitmap.getWidth(), _bitmap.getHeight(), _bitmap, 0, 0); 
     g.drawText(text, _bitmap.getWidth() + 15, 
       y, 0, w); 
     g.drawRect(0, 0, list.getWidth(), list.getRowHeight()); 
    } else { 
     g.setColor(0x4096cc); 
     g.drawBitmap(5, (bitmapHeight - fontHeight) * 2, 
       _bitmap.getWidth(), _bitmap.getHeight(), _bitmap, 0, 0); 
     g.drawText(text, _bitmap.getWidth() + 15, 
       y, 0, w); 
    } 

덕분에 여기 내 관련 코드입니다!

답변

1

모든 코드가 없으면 말하기 어렵지만 drawText 호출은 y 값을 사용하지만 다른 호출은 그렇지 않으므로 모두 동일한 지점에서 그리기를 설명합니다.

+0

맞아, 내 drawBitmap() 및 drawRect()를 수정하여 y가 트릭을 사용하도록 유도했다. 고맙습니다! – littleK