亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4494 | 回復(fù): 0
打印 上一主題 下一主題

LWUIT精簡解說 21條 [轉(zhuǎn)] [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-01-07 18:47 |只看該作者 |倒序?yàn)g覽

      Sun發(fā)布了LWUIT(Light-Weight UI Toolkit)的源代碼以及示例代碼。項(xiàng)目主頁訪問:https://lwuit.dev.java.net/
  The Lightweight UI Toolkit (LWUIT) 是一個(gè)輕量級JavaME UI工具包。LWUIT類似Swing 的MVC架構(gòu), 支持多種布局(Layouts), 皮膚更換, 字體, 觸摸屏, 動(dòng)畫效果, Rich控件, 3D集成, Painter, 模式對畫框, I18N/L10N等。
      學(xué)習(xí)Lwuit時(shí),一些基礎(chǔ)知識是一定要掌握的,以下是一些基本應(yīng)用,包括組件的一些基本屬性,使用方式,以及布局,并提及一些需要注意的地方。
在MIDlet中初始化Lwuit 也是唯一使用原有J2me的東西
      可以在startApp方法中定義啟動(dòng)的過程
        public void startApp() {
            //init the LWUIT Display
            Display.init(this);
            //加載資源文件
      try {
      Resources r = Resources.open("/myresources.res");
      UIManager.getInstance().setThemeProps(r.getTheme(
      r.getThemeResourceNames()[0])
      ); }
      catch (java.io.IOException e) {
      }
簡單的使用一個(gè)內(nèi)置Form進(jìn)行顯示,而無須使用一個(gè)而外的類
   Form f = new Form();
   f.setTitle("Hello World");
   f.setLayout(new BorderLayout());
   f.addComponent("Center", new Label("I am a Label"));
   f.show();
   注意使用show方法進(jìn)行顯示
組件介紹
關(guān)于組件的使用,我一共列出了21條:
1。Component,Container,Form
2。Label
3。Button
4。RadioButton,ButtonGroup,CheckBox,ComboBox
5。TextArea
6。TabbedPane
7。 使用 Lists
8。ListCellRenderer 渲染器
9。使用 Dialogs 對話框
10。使用LayoutManagers 使用布局管理器(BorderLayout,BoxLayout,FlowLayout,GridLayout,GroupLayout)
11。使用 Painter
12。Using the Style Object 設(shè)置樣式對象
13。Theming 皮膚
14。Resources 資源
15。Localization (L10N) 本地化
16。M3G 用于實(shí)現(xiàn)3D功能,需要手機(jī)的支持 Jsr184
17。Logging 日志,可以保存在RMS或者本地文件中
18。創(chuàng)建自定義的組件,只要繼承Component對象,然后重寫paint方法即可,類似Canvas的操作
19。用于在窗口變化時(shí)候獲取合適的顯示效果
20。影響內(nèi)存使用的因素
21。Speed 速度方面


1。Component,Container,Form
      Component 用于顯示到頁面上的基礎(chǔ)部分,可以理解為DisplayObject,也就是組件部分  
      Container 用于保存多個(gè)Components的容器類型,提供了布局的能力
      Form : 提供title和menus,并且提供一個(gè)content放置Components,并且提供了content的滾動(dòng)能力,addComponent,用于添加Components到Content中

  • 提供的一些方法和使用方式  
      Form mainForm = new Form("Form Title");  //聲明一個(gè)帶標(biāo)題的Form
      mainForm.setLayout(new BorderLayout()); //設(shè)置布局管理器
      mainForm.addComponent(BorderLayout.CENTER, new Label(“Hello,World”)); //添加Components組件,
      mainForm.setTransitionOutAnimator(CommonTransitions.createFade(400)); //設(shè)置動(dòng)畫
      mainForm.addCommand(new Command("Run", 2)); //添加菜單命令
      mainForm.show(); //顯示Form

  • 一些技巧  
      1:可以使用帶參數(shù)的構(gòu)造函數(shù),設(shè)置標(biāo)題.也可以不設(shè)置標(biāo)題的構(gòu)造函數(shù)
      2:addComponent() 方法提供兩個(gè)重載,區(qū)別在于是否指定布局位置
      3:Transition動(dòng)畫用于在forms之間進(jìn)行切換時(shí)候觸發(fā)
      4:Form通過Commands添加菜單,根據(jù)添加順序排序顯示,其他使用與普通的J2me一樣
2。Label
      Label: 可以同時(shí)顯示圖片和文字,設(shè)置align布局,可以通過繼承Label實(shí)現(xiàn)擴(kuò)展,如果更復(fù)雜,可以使用Button

  • 提供的一些方法和使用方式
      Label textLabel = new Label("I am a Label");  //創(chuàng)建一個(gè)單行文本
      Image icon = Image.createImage("/images/duke.png");
      Label imageLabel = new Label(icon);   //創(chuàng)建一個(gè)帶圖片的Label
      setTextPosition(int alignment); //設(shè)置布局方式,CENTER, LEFT, RIGHT,LEFT,TOP, BOTTOM, LEFT, RIGHT,
3。Button
      Button 可以用于觸發(fā)一個(gè)點(diǎn)擊的事件Action,使用一個(gè)ActionListeners 進(jìn)行監(jiān)聽
      final Button button  = new Button("Old Text");
        //使用匿名的ActionListener接口實(shí)現(xiàn)類進(jìn)行監(jiān)聽
      button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
      button.setText("New Text");
      }});
      Button繼承Label, 所以可以設(shè)置不同圖文混編的風(fēng)格,并且提供了三種狀態(tài)ollover, pressed, and the default state
4。RadioButton,ButtonGroup,CheckBox,ComboBox

  • RadioButton  單選按鈕,繼承自Button  
      RadioButton radioButton = new RadioButton(“Radio Button”);
      同樣,也會觸發(fā)action

  • ButtonGroup 用于保證RadioButton只能選中一項(xiàng)  
      RadioButton rb1 = new RadioButton("First RadioButton in Group 1");
      RadioButton rb2 = new RadioButton("Second RadioButton in Group 1");
      ButtonGroup group1 = new ButtonGroup();
      group1.add(rb1);
      group1.add(rb2);
      exampleContainer.addComponent(rb1);
      exampleContainer.addComponent(rb2);
      這里需要注意,只需要添加addComponent(RadioButton) 到容器中,不需要添加ButtonGroup,只用于后臺管理

  • CheckBox  多選框,不需要添加到group中,同樣也觸發(fā)事件  
      final CheckBox checkBox = new CheckBox(“Check Box”);
      通過checkBox.isSelected() 判斷是否被選中

  • ComboBox  列表,只允許一個(gè)被選中,多用于空間有限時(shí)候提供多選項(xiàng)的單選功能  
      創(chuàng)建需要一個(gè)數(shù)組作為數(shù)據(jù)源
      String[] content = { "Red", "Blue", "Green", "Yellow" };
      ComboBox comboBox = new ComboBox(content); //創(chuàng)建一個(gè)Combox,在這個(gè)構(gòu)造函數(shù)中也是使用List實(shí)現(xiàn)
      comboBox.setListCellRenderer(new checkBoxRenderer()); //設(shè)置renderer 渲染器
      也可以使用addActionListener注冊事件
      通過實(shí)現(xiàn)不同的renderer接口可以給組件提供不同的顯示效果 implements ListCellRenderer
5。TextArea

  • 例子  
      TextArea textArea = new TextArea(5, 20, TextArea.NUMERIC);
      textArea.setEditable(false);
      構(gòu)造函數(shù)的前兩個(gè)參數(shù)為 總行數(shù)和單行長度,第三個(gè)參數(shù)用于傳遞到本地文本輸入,用于指定限制的類型
      可以使用TextArea的常量 ANY,EMAILADDR, NUMERIC, PHONENUMBER, URL, or DECIMAL,PASSWORD, UNEDITABLE, SENSITIVE,NON_PREDICTIVE, INITIAL_CAPS_SENTENCE, INITIAL_CAPS_WORD.也可以使用 | 設(shè)置復(fù)合約束 ,默認(rèn)情況下可編輯
6。TabbedPane   
      TabbedPane   通過類似Tab的選項(xiàng)卡方式并排放置一組容器,容器的tab標(biāo)簽可以使用圖文混編方式
      可以使用addTab or insertTab methods 方法添加容器
      removeTabAt(int index) 移除容器
      tab的索引由0開始
      tab標(biāo)簽可以有四種不同的放置方法  LEFT, RIGHT, TOP or BOTTOM using the setTabPlacement method.
      TabbedPane tabbedPane = new TabbedPane(TabbedPane.TOP);
      tabbedPane.addTab("Tab 1", new Label("I am a TabbedPane!"));
      tabbedPane.addTab("Tab 2", new Label("Tab number 2"));
      構(gòu)造函數(shù)使用一個(gè)Tab標(biāo)簽布局的常量作為參數(shù)
      addTab,第一個(gè)為tab標(biāo)簽名,第二個(gè)參數(shù)為直接放置到容器中的內(nèi)容
7。 Using Lists

  • List,使用Swing的  MVC模式進(jìn)行創(chuàng)建  
      rendered using a ListCellRenderer and are extracted using the ListModel.
      使用ListCellRenderer 作為顯示的V  
      使用ListModel. 作為數(shù)據(jù)源M
      其他部分為C進(jìn)行操作

  • 創(chuàng)建List 有四個(gè)構(gòu)造函數(shù)  
      List()            
      List(ListModel model)   //直接實(shí)例化ListModel
      List(Object[] items) //Array數(shù)組
      List(Vector items) //Vector集合

  • ListModel  也可以分為自定ListModel的實(shí)現(xiàn),以及DefaultListModel  
      DefaultListModel的使用
      String[] items = { "Red", "Blue", "Green", "Yellow" };
      DefaultListModel myListModel = new DefaultListModel(items);  //使用Array作為數(shù)據(jù)源
8。ListCellRenderer 渲染器

  • 同樣也可以自定ListCellRenderer的實(shí)現(xiàn),以及DefaultListCellRenderer  
      自定義的時(shí)候,可以通過繼承Label,來節(jié)約開發(fā)的速度 ,主要實(shí)現(xiàn)兩個(gè)方法
      public class MyYesNoRenderer extends Label implements ListCellRenderer{
      public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
      ((Boolean)value).booleanValue()  來獲取單項(xiàng)的值
      }
      public Component getListFocusComponent(List list) {
      Label label = new label("");
      label.getStyle().setBgTransparency(100);
      return label;
      }}

  • DefaultListCellRenderer,默認(rèn)也是使用Label and the ListCellRenderer interface.  
      實(shí)現(xiàn)兩個(gè)方法,大體和上面相同
      getListCellRendererComponent()
      getListFocusComponent()  //選中風(fēng)格,可以通過修改透明度來表現(xiàn)

  • 添加或移除item  
      添加的方法有兩種,創(chuàng)建一個(gè)ListModel,然后add到list中,重置一個(gè)List 使用setModel(ListModel model). 方法
      移除的方法有removeItem(int index) or removeAll() methods.
      myListModel.addItem(“New Item”); //添加Item
      myListModel.removeItem(index);   //刪除Item
      myListModel.removeAll(); //刪除所有Item

  • List 事件 提供了兩種事件 ActionEvent and SelectionsListener  
      addFocusListener(FocusListener l) 區(qū)別于常用的Action
      SelectionListener 應(yīng)該會更有用一些

  • Fixed Selection Feature 應(yīng)該是只有一行的List,不彈出菜單的模式 //具體還是demo才知道  
      通過 setFixedSelection(int fixedSelection) 進(jìn)行設(shè)置
      通過四個(gè)常量屬性進(jìn)行設(shè)置
      FIXED_NONE   //普通的List
      FIXED_TRAIL  //靜態(tài)
      FIXED_LEAD   // ...下面兩種都需要用demo看下區(qū)別
      FIXED_CENTER
      setSmoothScrolling(true) //設(shè)置這個(gè)屬性,應(yīng)該是在移動(dòng)時(shí)增加動(dòng)畫效果,默認(rèn)為false
9。Using Dialogs 對話框
      也提供一個(gè)Content,可以存放其他的Components  //對于是否阻塞線程,需要了解一下

  • Dialog提供了五種不同的類型,默認(rèn)附加了不同的提示音  
      ALARM //警告
      CONFIRMATION //確認(rèn)
      ERROR //錯(cuò)誤
      INFO //信息
      WARNING //警告提示  
      當(dāng)前默認(rèn)情況下不支持Icon,不過可以自定義Dialog

  • 調(diào)用dialog的show()方法進(jìn)行顯示,提供的參數(shù)很多,可以選擇合適的重載進(jìn)行顯示  
      1:String title  標(biāo)題
      2:Component body 一個(gè)單獨(dú)的Component
      3:String text 用于代替Component body部分
      4:Command[] cmds 可以添加Commands
      5:int type 設(shè)置不同的類型
      6:Image icon 添加icon
      7:timeout 打開持續(xù)時(shí)間,設(shè)置成0表示為持續(xù)打開
      8:Transition transition 添加動(dòng)畫
      9:String okText 設(shè)置Ok按鈕的內(nèi)容
      10:String cancelText 設(shè)置cancel的內(nèi)容
      11:int top 設(shè)置top所在位置
      12:int bottom 設(shè)置bottom位置
      13:int left  同上
      14:int right 同上
      15:boolean includeTitle  //需要了解下
      show方法可以返回三個(gè)類型 void,Command,boolean
      boolean值在點(diǎn)擊ok時(shí)為true, cancel時(shí)為null
      使用非靜態(tài)的方法顯示Dialog
      dialog.show(90, 90, 10, 10, true);
      關(guān)閉dialog  dispose()
      需要先show之前設(shè)置timer去關(guān)閉dialog
      Dialog也可以返回一個(gè)Command 區(qū)別于點(diǎn)擊OK按鈕
10。Using LayoutManagers 使用布局管理器

  • 已經(jīng)的布局管理器  
      BorderLayout
      BoxLayout
      FlowLayout
      GridLayout
      GroupLayout

  • BorderLayout 邊框布局模式(東西南北中)  
      如下五個(gè)區(qū)域
      Center
      East
      North
      South
      West
      在添加Components的時(shí)候進(jìn)行設(shè)置
      addComponent(BorderLayout.CENTER, component) // preferred
      或者直接使用字符串
      addComponent(“Center”, component) // valid but error prone  容易出錯(cuò)

  • BoxLayout  盒子布局  
      包括了 X_AXIS(橫向)  Y_AXIS(豎向)的布局,并排的方式
      BoxLayout boxLayout = new BoxLayout(BoxLayout.X_AXIS);
      BoxLayout boxLayout = new BoxLayout(BoxLayout.Y_AXIS);

  • FlowLayout 流式布局  
      這個(gè)也是容器默認(rèn)的布局方式
      橫向布局,如果長度超出,則自動(dòng)換行處理
      FlowLayout exampleLayout = new FlowLayout();
      container.setLayout(exampleLayout);
      也可以通過設(shè)置構(gòu)造函數(shù),用于設(shè)置布局起始的位置,比如 Left, Right, or Center
      FlowLayout exampleLayout = new FlowLayout(Component.RIGHT);

  • GridLayout 表格式布局,可以用于設(shè)置九宮圖  
      可以定制行和列,
      GridLayout exampleLayout = new GridLayout(0,2);  //2表示每行顯示兩個(gè)單元格cell,0不知道是啥

  • GroupLayout   

      // GUI builders 的方式進(jìn)行布局,用于NetBeans中的Swing開發(fā)
11。Using Painters
      是一個(gè)接口,可以用于繪制一個(gè)Components的背景,將繪制在Components限定的范圍內(nèi)
      如果要查看painter繪制結(jié)果,需要設(shè)置對應(yīng)的transparency //需要查看下
      painter可以使用絕對坐標(biāo)的繪圖,所以可以重用在其他組件之上
      Painter diagonalPainter = new Painter() {
      public void paint(Graphics g, Rectangle rect) {
            g.drawLine(rect.getX(),
            rect.getY(),
            rect.getX() + rect.getSize().getWidth(),
            rect.getY() + rect.getSize().getHeight());
            }      
      };
      注意查看這里獲取位置的方法 x y, size width height
      使用時(shí)候只要給指定的組件設(shè)置Painter即可
      myComponent.getStyle().setBgPainter(diagonalPainter);
      將會自動(dòng)應(yīng)用繪圖
      記得顯示的調(diào)用設(shè)置透明度  0-255之間
      myButton.getStyle().setBgTransparency(100);
12。Using the Style Object 設(shè)置樣式對象
      The Style object sets colors, fonts, transparency, margin, padding, images, and borders to define the style for a given component.
      使用component.getStyle(). 獲取該對象,可以在運(yùn)行時(shí)候改變

  • 顏色Style  
      Foreground color 前景色,主要指文字顏色
      Foreground selection color 當(dāng)組件獲取焦點(diǎn)時(shí),字體的顏色
      Background color 背景色
      Background selection color  獲取焦點(diǎn)時(shí)候的背景色
      這里顏色使用的是RGB(格式為0x000000),不帶alpha透明色,有而外的透明設(shè)置在Style中

  • Font 字體  
  • Transparency 透明度  
      setBgTransparency進(jìn)行設(shè)置 范圍是0-255之間

  • Margin and Padding 外邊距和內(nèi)間距,與css的盒模型一樣  
      設(shè)置的方式
      setPadding(int top, int bottom, int left, int right)
      setPadding(int orientation, int gap)
      setMargin(int top, int bottom, int left, int right)
      setMargin(int orientation, int gap)
      // orientation can be Component.TOP, BOTTOM, LEFT or RIGHT
      這兩個(gè)類型方法的區(qū)別在于同時(shí)設(shè)置一個(gè)屬性,還是多個(gè)屬性

  • Images  背景色,默認(rèn)為不限制背景色  使用bgImage 可以用于進(jìn)行設(shè)置  
  • Borders邊框類型  


  • Style Listener 樣式事件  
      myComponent.getStyle().addStyleListener(new StyleListener() {
      public void styleChanged(String propertyName, Style source) {}
      }}
      Painters也可以用于在Style中設(shè)置樣式,用于按照要求繪制背景
      mycomponent.getStyle().setBgPainter(myPainter);
13。Theming 皮膚
      refreshTheme()方法用于更新所有的樣式,不過手動(dòng)修改的樣式元素,并不會被更新

  • 設(shè)置樣式屬性需要注意的地方  
      Button.font – font for all buttons //將會作用到所有Button組件的字體
      font- 將會影響到所有沒有定義默認(rèn)值的組components件
      這里不像css那樣有特殊的單獨(dú)樣式設(shè)置

  • 所有支持的樣式屬性  
      fgColor   前景色 16進(jìn)制的格式
      bgColor   背景色 16進(jìn)制的格式,也可以使用縮寫ff
      bgSelectionColor 背景選中色 16x
      fgSelectionColor 前景選中色 16x
      bgImage    背景圖片
      transparency  設(shè)置背景圖樣式透明色 0-255之間,不過目前對背景圖無效

  • font 分為Bitmap font和System font 定義的方式為Bitmap{myFontName} 和System{face;style;size}  
      其中系統(tǒng)字體的參數(shù)為
      face=FACE_SYSTEM,FACE_PROPORTIONALFACE_PROPORTIONAL
      style=STYLE_PLAIN,STYLE_BOLD,STYLE_ITALIC
      size=SIZE_MEDIUM,SIZE_SMALL,SIZE_LARGE
      例如
      System{FACE_SYSTEM;STYLE_PLAIN;SIZE_SMALL}
      scaledImage      使用boolean值設(shè)置背景圖使用平鋪tiled還是重復(fù)scaled  默認(rèn)為true,重復(fù)scaled
      margin 外邊距,使用四個(gè)參數(shù)進(jìn)行設(shè)置,代表top, bottom, left, and right. For example, 1, 2, 3, 4
      padding 內(nèi)邊距,使用與margin類似

  • 更新主題時(shí)  
      使用Resources.open("/javaTheme.res");//進(jìn)行加載
      使用UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));//進(jìn)行設(shè)置
      然后可以使用components.refreshTheme 更新組件的樣式

  • LookAndFeel  DefaultLookAndFeel  似乎是用來定義一些樣式無法修改到的東西,比如滾動(dòng)條,具體要看API Documention  

14。Resources 資源
      LWUIT允許的resource elements的元素包括:
      Image Resources       //圖像資源
      Animation Resources   //動(dòng)畫資源
      Bitmap Fonts       //位圖字體
      Localization (L10N)   //本地化
      Themes       //主題
      可以通過專門的編輯器 Resource Editor 或者Ant tasks來創(chuàng)建Resources
      Loading a Resource 讀取一個(gè)資源文件
      Resources res = Resources.open(“/myresourceFile.res”);
      Image i = res.getImage(“imageName”);
      圖片可以保存在res文件中,或者直接放置在jar文件中
      讀取jar中圖片的方式
      Image image = Image.createImage("/images/duke.png");
      image的標(biāo)簽,應(yīng)該是res配置的時(shí)候,可以有三個(gè)屬性
      name //名稱,默認(rèn)為文件名
      file //圖像文件所在位置
      pack //boolean值 ,默認(rèn)為false ,用于設(shè)置是否為Indexed
      圖像少于256色的時(shí)候,可以使用Index image,有利于節(jié)約空間

  • 使用indexed image的注意地方  
      1:因?yàn)樾枰凑障袼氐娜ゲ僮鲌D像,所以在顯示的時(shí)候速度比較慢,不過在現(xiàn)在的手機(jī)上并不明顯
      2:在運(yùn)行時(shí)轉(zhuǎn)換indexed image將會比較慢,而且可能會失敗,所以應(yīng)該在編譯時(shí)候進(jìn)行轉(zhuǎn)換
      3:Indexed image并沒有在res文件中被壓縮,所以res文件看起來比較大,不過在jar文件中卻能被很好的壓縮,而且效果比使用png更好
      4:indexed images  創(chuàng)建后將不能被改變,比如getGraphics(),詳情看API

  • Animation Resources  
      LWUIT支持從Gif文件中得到動(dòng)畫效果,保存的結(jié)構(gòu)類似image structure
      StaticAnimation 用于操作動(dòng)畫..派生自Image,所以可以直接使用在icon或者其他地方

  • Fonts 字體  
      LWUIT支持bitmap fonts and system fonts.
      System Font  包括了三個(gè)參數(shù)
      Face   //如FACE_SYSTEM, FACE_PROPORTIONAL and FACE_MONOSPACE.
      Style  //如STYLE_PLAIN, STYLE_ITALIC, STYLE_BOLD.
      Size   //如SIZE_SMALL, SIZE_MEDIUM, SIZE_LARGE.
      在類的內(nèi)部可以去創(chuàng)建字體引用
      Font.createSystemFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDIUM);
      同時(shí)也可以去創(chuàng)建復(fù)合類型的字體(加粗和傾斜)
      Font.createSystemFont(Font.FACE_SYSTEM,Font.STYLE_BOLD | Font.STYLE_ITALIC,Font.SIZE_MEDIUM);
      Bitmap Fonts
      三個(gè)屬性
      name  //在res文件中,用于程序加載
      charset //就是包含的字符,默認(rèn)為24個(gè)字母,數(shù)字和一些符號
      src //字體文件TrueType所在位置
      size    //字體大小
      bold //是否加粗,默認(rèn)為false
      trueType //默認(rèn)為true,根據(jù)src屬性決定是否生效
      antiAliasing //默認(rèn)為true,如果為false表示別名
      logicalName  //邏輯名稱,表示不同的字體編碼類型,類似css中使用的4個(gè)大區(qū)字體
      //這里注意文檔中只介紹了使用ant創(chuàng)建Bitmap font,具體還是要查看API文檔
15。Localization (L10N) 本地化
      類似Properties文件的使用,使用鍵值對的方式保存在Resources中,只支持使用USASCII碼的形式

  • 讀取  
      Hashtable h = bundle.getL10N("localize", "en"); //bundle應(yīng)該是Resources的實(shí)例
      UIManager.setResourceBundle(Hashtable)  //可以用于替換當(dāng)前語言

  • Themes 皮膚  
      使用ResourceEdit.exe 可以很方便的進(jìn)行編輯
      加載到程序:
      UIManager.getInstance().setThemeProps(res.getTheme(“myTheme”));
      編輯器創(chuàng)建的默認(rèn)就是Bitmap font
      使用字體需要注意版權(quán)問題... 使用編輯器的時(shí)候,可以通過設(shè)置 Anti-aliasing 達(dá)到反鋸齒的能力

  • Localization 的使用  
      Using Transitions and Animations
      使用過度效果以及動(dòng)畫
      支持的Transition有,可用于form之間進(jìn)行的轉(zhuǎn)換
      Slide
      Fade
      Slide Transition
      在第一個(gè)form中定義
      CommonTransitions.createSlide(int type, boolean forward, int speed)
      參數(shù)
      type  //定義移動(dòng)的方向,包括了SLIDE_HORIZONTAL or SLIDE_VERTICAL
      forward //用一個(gè)boolean值表示,不同方向時(shí),起始位置,比如左到右,不過上到下
      speed //用int表示的應(yīng)該是動(dòng)畫持續(xù)的時(shí)間,從而在內(nèi)部計(jì)算運(yùn)行的速度
      使用的例子
      myForm.setTransitionOutAnimator(CommonTransitions.createSlide(
      CommonTransitions.SLIDE_HORIZONTAL, true, 1000));
      Fade Transition   漸變效果 (淡入淡出)
      CommonTransitions.createFade(int speed)  
      參數(shù)
      speed 同樣表示動(dòng)畫持續(xù)時(shí)間,毫秒為單位
      例子
      themeForm.setTransitionInAnimator(CommonTransitions.createFade(400));
16。M3G 用于實(shí)現(xiàn)3D功能,需要手機(jī)的支持  Jsr184
      //加載源碼.注意需要使用jdk1.4進(jìn)行編譯
      調(diào)用的方式通過  M3G.Callback內(nèi)部類接口的實(shí)例來創(chuàng)建3d動(dòng)畫對象     
      class MyCallback implements M3G.Callback {
         ....
         public void paintM3G(Graphics3D g3d) {
            g3d.clear(background);
            g3d.render(world);
         }
         ...
      }
      在Components組件上使用的方式為
        private M3G.Callback myCallbackInstance = new MyCallback();
        public void paint(Graphics g) {
            M3G.getInstance().renderM3G(g, true, 0, myCallbackInstance);
            // draw some stuff in 2D
            ...
        }
      注意這里的區(qū)別Graphics3D 和普通的Graphics對象
      M3G目前只支持標(biāo)準(zhǔn)的圖像文件,而不支持IndexedImage and RGBImage
17。Logging 日志,可以保存在RMS或者本地文件中

  • 也分為了四種級別  
      DEBUG  //默認(rèn)級別
      INFO
      WARNING
      ERROR
      記錄日志的方式
      使用static p(String text) or p(String text,int level) methods.
      Log.p(“Finish loading images”)
      顯示日志
      Log.showLog();
18。創(chuàng)建自定義的組件,只要繼承Component對象,然后重寫paint方法即可,類似Canvas的操作
      public class MyComponent extends Component {
      public void paint(Graphics g) {
      g.setColor(0xffffff);
      g.fillRect(getX(), getY(), getWidth(), getHeight());
      g.setColor(0);
      g.drawString("Hello World", getX(), getY());
      }}
      在頁面上進(jìn)行使用的時(shí)候,就和其他Components一樣 add到容器之上
      需要注意的地方
      這里使用的顏色都是不帶alpha的RGB
      使用 getX(), getY() 從容器中獲取Components所在的位置,也包括了 getWidth(), getHeight()
      控制組件的大小適宜,通過重寫calcPreferredSize()方法
      protected Dimension calcPreferredSize() {
            Font fnt = Font.getDefaultFont();
            int width = fnt.stringWidth(“99999-9999”)
            int height = fnt.getHeight();
            return new Dimension(width, height);
      }
      //這里使用到了獲取字體高度和寬度的方法

  • 事件監(jiān)聽
      和MIDP原有組件一樣,只要重寫對應(yīng)key事件即可
      public void keyReleased(int keyCode) {
      if(keyCode >= '0' && keyCode       Components組件中的事件,要求當(dāng)前組件獲取焦點(diǎn)后才會觸發(fā)
      setFocusable(true); //使其獲取焦點(diǎn)
      使用LookAndFeel繪制
      UIManager.getInstance().getLookAndFeel().drawBorder(g, this,getStyle().getFgSelectionColor(), 2);
      不是很明白的例子,在Components中
      public void paint(Graphics g) {
      UIManager.getInstance().getLookAndFeel().setFG(g, this);
      Style style = getStyle();
      g.drawString(inputString, getX() + style.getPadding(LEFT),
      getY() + style.getPadding(TOP));
      }
      不過一些方法不錯(cuò) 以及常量, 可能第一個(gè)方法是初始化組件中參數(shù)的狀態(tài)
      229136
      Background 使用Painter來繪制,允許透明translucent與不透明opaque
      對自定義組件添加Animating動(dòng)畫支持
      protected void initComponent() {
          getComponentForm().registerAnimated(this);
      }
      不能在構(gòu)造函數(shù)中進(jìn)行注冊
      自定義組件的例子
      關(guān)鍵方法一
      protected Dimension calcPreferredSize() {
            Style style = getStyle();
            Font fnt = style.getFont();
            int width = fnt.stringWidth("99999-9999");
            int height = fnt.getHeight();
            height += style.getPadding(Component.TOP) +
      style.getPadding(Component.BOTTOM);
            width += style.getPadding(Component.LEFT) +
      style.getPadding(Component.RIGHT);
            return new Dimension(width, height);
        }
19。用于在窗口變化時(shí)候獲取合適的顯示效果
      主要使用到的方法
      1:   Style style=getStyle(); //獲取當(dāng)前組件默認(rèn)樣式對象
      2:   style.getPadding(LEFT) //獲取左內(nèi)邊距
      3:   getX(), getY()獲取x,y參數(shù)
      4:   style.getFont().stringWidth(inputString); 獲取樣式默認(rèn)字體的寬度,其中inputString為輸入的字符串
      5:   style.getFont().getHeight() 獲取字體的高度
      該方法返回的是 new Dimension(width, height); 對象,需要驗(yàn)證下有何效果
      注冊動(dòng)畫效果
        protected void initComponent() {
            getComponentForm().registerAnimated(this);
        }
      修改動(dòng)畫效果細(xì)節(jié)
      public boolean animate() {
           boolean ani = super.animate();
           long currentTime = System.currentTimeMillis();
           if (drawCursor) {
               if ((currentTime - time) > 800) {
                   time = currentTime;
                   drawCursor = false;
                   return true;
               }
           } else {
               if ((currentTime - time) > 200) {
                   time = currentTime;
                   drawCursor = true;
                   return true;
               }
           }
           return ani;
      }
20。影響內(nèi)存使用的因素
      計(jì)算一個(gè)圖片在不同手機(jī)上的所占用的內(nèi)存
      長  寬   
      16 bit: 128 * 128 * 2 = 32,768   一張全屏的圖片所占用的內(nèi)存
      24 bit: 320 * 240 * 4 = 307,200
      這里用的是8的倍數(shù)來進(jìn)行計(jì)算, 24位會被當(dāng)做32位計(jì)算
      可以使用Indexed images 來代替. 不過缺點(diǎn)是只支持256色,優(yōu)點(diǎn)在于更少的內(nèi)存使用率
      Display's 的init()方法可以關(guān)閉一些占用內(nèi)存較多的特性
21。Speed 速度方面
      Event Dispatch Thread (EDT) 事件發(fā)送線程
      Display methods callSerially, callSeriallyAndWait, and  invokeAndBlock. 通過這幾個(gè)方法進(jìn)行調(diào)用特別的線程處 理
      Light Mode 不是很清楚用途
      turning off light mode (after Display.init())  

本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u/20442/showart_2143333.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP