2011-08-16 2 views
1

保存したジェスチャーをユーザーに表示する必要があるアンドロイドアプリを開発しています。私はGestureOverlayViewオブジェクトのsetGesture()関数を使用してそれをしようとしましたが、ジェスチャを画面外に表示します。 Androidエミュレータ2.1では、画面の左上隅に小さな部分しか表示されません。ここ は、次のように「savegesture.xml」で定義されたアンドロイドGestureOverlayViewがある私が使用しているコード..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.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年前の質問ですが、私はまだ回答を追加します。

GestureOverlayViewの外に表示されるのは、onCreateに設定されているためです。レイアウト測定が計算された後で設定する必要があります。

ViewTreeObserverは、いつレイアウトが測定されたかを知るために使用できます。このAltough

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

5歳の質問ですが、承認答えはこれと比較して非効率的であるので、私はまだ、答えを追加します:

使用view.post()コードを実行するためにビューがロードされた後。

gestureoverlay.post(new Runnable() { 
    @Override 
    public void run() { 
     gestureoverlay.setGesture(mOldGesture); 
    } 
}); 
関連する問題