【分析】
1 字符串拆分
- String info_wrap1[] = StringDealMethod.format(info, width-15, ft);
具體請參考JavaMe連載(4)-繪制可自動換行文本
2 避免字截斷
如何在指定的區域內繪制整行文本,而不會因為字體或屏幕高度的改變使文本出現截斷的問題,使文本出現“半截字”的問題呢?
- bodyHeight = ((int) (height-head.menuHeight-menu.menuHeight)/ft.getHeight())*ft.getHeight();
經過上述處理後,滾動區域的高度bodyHeight總會是字體高度的整數倍,這樣就不會出現上述字截斷的問題了。
3 繪制文本
- for(int i=0; i<info_wrap1.length;i++)
- {
- graphics.drawString(info_wrap1[i],5, i * ft.getHeight()+head.menuHeight+margin, Graphics.TOP|Graphics.LEFT);
- }
4 坐標變換
- graphics.clipRect(0, head.menuHeight+margin, width, bodyHeight);
- graphics.translate(0, dir*currentPageIndex*bodyHeight);
文本繪制完成後,將坐標變換回來。
- graphics.translate(0, -dir*currentPageIndex*bodyHeight);
5 繪制滾動條
- private void drawScrollBar()
- {
- int barHeight = height-head.menuHeight-menu.menuHeight;
- graphics.setColor(Color.menuFrame);
- graphics.fillRect(width-3, head.menuHeight, 2, barHeight);
- graphics.setColor(Color.selectBg);
- graphics.fillRect(width-4, head.menuHeight+(currentPageIndex)*barHeight/page, 4, barHeight/page);
- }
6 事件處理
當檢測到按鍵事件後,進行翻頁操作。
- protected void keyPressed(int keyCode)
- {
- //System.out.println(keycode);
- switch(keyCode)
- {
- case KeyID.SOFT_RIGHT:
- {
- String flag = "0";
- Object [] args = {flag,""};
- controller.handleEvent(UIController.EventID.EVENT_MAIN_SCREEN,args);
- break;
- }
- default:
- ;
- }
- keyCode = getGameAction(keyCode);
- //System.out.println(page);
- switch(keyCode)
- {
- case UP:
- {
- dir = -1;
- if(currentPageIndex>0)
- {
- currentPageIndex--;
- }
- else
- {
- //dir = 0;
- }
- show();
- break;
- }
- case DOWN:
- {
- dir = -1;
- if(currentPageIndex<page-1)
- {
- currentPageIndex++;
- }
- else
- {
- //dir = 0;
- }
- show();
- break;
- }
- }
- }
本例方法能自適應的檢測屏幕的寬度和長度,依據字體的大小,對文本進行分頁,滾動顯示,實現效果如圖1所示:
圖1 滾動顯示效果