2011-02-18 74 views
1

我有一個繪圖活動,可以創建一個自定義「畫布」視圖,佔據整個屏幕,允許用戶在其上繪製。我需要將活動鎖定到縱向,因爲繪圖應用程序是一個草圖板替換,並且用戶需要旋轉「打擊墊」以在沒有墊翻轉的情況下進行繪製。這當然意味着選項菜單也鎖定在該方向上,並且取決於用戶,菜單可能會從頂部,底部或側面彈出。我想有選項菜單始終位於底部相對於用戶......一些選項我正在考慮,並希望任何建議或信息:Android:動態更改選項菜單的位置

  1. 允許方向變化,所以菜單的移動然後使用SensorManager偵聽方向,然後手動將畫布視圖旋轉回「正確」方向(縱向)。這很醜陋,因爲畫布的旋轉可能會延遲,並且由於X/Y被交換,它會引入一些潛在的複雜計算等。
  2. 限制方向更改,然後使用SensorManager偵聽方向,然後手動將選項菜單旋轉回到底部。不知道這是否可能。
  3. 鎖定方向,並創建一個自定義的視圖,截取菜單按鈕,並顯示我需要管理的「假」選項菜單等等。真的不想取代內置的操作系統功能,可能是對未來的不同版本的操作系統來說是一場惡夢,等等。

任何人有任何想法如何處理這個?如果#2是可能的,我很樂意,但是找不到與此相關的任何內容。

感謝,

保羅

編輯:

已經證實,#2是不可能的,所以我想我的選擇是#1,#3,除非任何人有任何想法?

回答

0

我的解決方案如下:

  • 允許活性Android清單正常取向的變化。
  • 在自定義 '畫布' 視圖的構造函數,啓動跟蹤領域,填充mDisplay,即通過獲取顯示信息:

代碼:

mDisplay = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
  • 在的onDraw(),檢查以查看顯示器旋轉是否爲0以外的值,並將畫布旋轉回0旋轉值:

代碼:

if (mDisplay.getRotation() > 0) { 
    canvas.save(Canvas.HAS_ALPHA_LAYER_SAVE_FLAG); 
    canvas.rotate(-mDisplay.getRotation(), px, py); 
    ... 
    do stuff 
    ... 
    canvas.restore(); 
} 

不知道這是最好的解決方案,但它似乎工作。