2011-08-16 26 views
1

我正在開發一個android應用程序,我需要向用戶顯示保存的手勢。我曾嘗試使用GestureOverlayView對象的setGesture()函數來執行此操作,但它在屏幕之外顯示該手勢。在Android模擬器2.1屏幕的左上角只有一小部分可見。 這裏是我使用的代碼..setGesture()在屏幕之外顯示手勢:Android

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.savegesture); 
    gestureoverlay = (GestureOverlayView) findViewById(R.id.gestures_overlay2); 
    mOldGesture = (Gesture) getIntent().getExtras().get("gesture"); 
    mDoneButton = findViewById(R.id.done); 
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    gestureoverlay.setLayoutParams(new FrameLayout.LayoutParams(dm.widthPixels,dm.heightPixels,0x50)); 
    gestureoverlay.setGesture(mOldGesture); 
    gestureoverlay.invalidate(); 
} 

了Android GestureOverlayView在「savegesture.xml」定義如下: -

<android.gesture.GestureOverlayView android:scaleType="center" android:layout_gravity="center" 
    android:id="@+id/gestures_overlay2" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:gestureStrokeType="multiple" /> 

我不知道是什麼問題,但它不會顯示手勢在屏幕....

回答

3

雖然這是一個3歲多的問題,我還是會添加一個答案。

手勢,因爲它在onCreate設置出現GestureOverlayView之外。它必須在計算佈局測量值後設置。

ViewTreeObserver可用於瞭解何時佈局已被測量。

ViewTreeObserver vto = gestureoverlay.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     gestureoverlay.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     gestureoverlay.setGesture(mOldGesture); 
    } 
}); 
0

Altough這是一個5歲的問題,我還是會比較添加一個答案,因爲答案批准是無效的這樣:

使用view.post()執行代碼視圖已經被加載後。

gestureoverlay.post(new Runnable() { 
    @Override 
    public void run() { 
     gestureoverlay.setGesture(mOldGesture); 
    } 
});