Android簡明開發教程十三:Option Menu畫筆樣本

來源:互聯網
上載者:User

引路蜂二維圖形畫筆(Pen)樣本含有四個樣本,Lines ,Dashes ,LineJoin 和LineCap。打算採用Option Menu(主菜單) 的方式來選擇不同樣本。

首先要對GuidebeeGraphics2DView,和Graphics2DActivity做些改動,從這個樣本開始,GuidebeeGraphics2DView需要動態 繪製不同圖形(可以通過菜單,或是Thread)。在GuidebeeGraphics2DView增加下面兩個方法:

final Runnable updateCanvas = new Runnable() {
public void run() {
invalidate();
}
};
public void refreshCanvas(){
post(updateCanvas);
}

post可以用在非UI Thread中Call UI Thread中方法。這裡只是觸發螢幕重繪事件以重新整理螢幕顯示。

在Graphics2DActivity增加一個變數protected GuidebeeGraphics2DView graphic2dView; 來獲得對應的 GuidebeeGraphics2DView執行個體。

graphic2dView=(GuidebeeGraphics2DView)findViewById(R.id.graphics2dview);

使用Option Menu,儘管也可以完全使用代碼來建立菜單,更一般的方法是使用菜單資源。在res 下建立menu 子目錄,然後 在res/menu下建立menu_option_line.xml 用來顯示Pen的四個樣本選項:

<?xml version=”1.0″ encoding=”utf-8″?>
<menu
xmlns:android=”http://schemas.android.com/apk/res/android“>
<item
android:id=”@+id/mnuLines”
android:title=”Lines”
android:icon=”@drawable/icon1″>
</item>
<item
android:id=”@+id/mnuDashes”
android:title=”Dashes”
android:icon=”@drawable/icon2″>
</item>
<item
android:id=”@+id/mnuLineCap”
android:title=”LineCap”
android:icon=”@drawable/icon3″>
</item>
<item
android:id=”@+id/mnuLineJoin”
android:title=”LineJoin”
android:icon=”@drawable/icon4″>
</item>
</menu>

<menu></menu> 定義菜單,<item></item>定義功能表項目,<item></item>可以嵌套以 定義子功能表。菜單可以定義id, Icon,Text等屬性。也可以支援單選,多選,此時就需要藉助<group></group>,使 用group可以把一最功能表項目定義為一個組,可以使用setGroupVisible()來顯示隱藏整個菜單組,Enable 或是Disable整個菜單組 setGroupEnabled()等。最關鍵的,有了組才能實現菜單的單選和多選功能:

<?xml version=”1.0″ encoding=”utf-8″?>
<menu xmlns:android=”http://schemas.android.com/apk/res/android“>
<item android:id=”@+id/item1″
android:icon=”@drawable/item1″
android:title=”@string/item1″ />
<!– menu group –>
<group android:id=”@+id/group1″>
<item android:id=”@+id/groupItem1″
android:title=”@string/groupItem1″ />
<item android:id=”@+id/groupItem2″
android:title=”@string/groupItem2″ />
</group>
</menu>

定義好菜單資源後,就可以使用MenuInflater.inflate()展開菜單,一般需要在Activity的onCreateOptionsMenu()展開菜單 :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_option_line, menu);
return true;
}

最後是響應菜單事件:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
menuOption = item.getItemId();
drawImage();
return true;
}

item.getItemId(); 返回菜單的ID(在菜單資源中定義)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.