setGesture () отображает жест за пределами экрана: Android - PullRequest
1 голос
/ 16 августа 2011

Я занимаюсь разработкой приложения для Android, в котором мне нужно отобразить сохраненный жест пользователю.Я попытался сделать это с помощью функции setGesture () объекта GestureOverlayView, но он отображает жест далеко за пределами экрана.Только небольшая часть видна в левом верхнем углу экрана в эмуляторе Android 2.1.Вот код, который я использовал ..

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" />

Я не знаю, чтопроблема, но он не покажет жест на экране ....

Ответы [ 2 ]

3 голосов
/ 17 апреля 2014

Хотя это 3-летний вопрос, я все равно добавлю ответ.

Жест появляется за пределами GestureOverlayView, поскольку он установлен в onCreate. Он должен быть установлен после вычисления размеров макета.

ViewTreeObserver может использоваться для определения времени измерения макета.

ViewTreeObserver vto = gestureoverlay.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        gestureoverlay.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        gestureoverlay.setGesture(mOldGesture);
    } 
});
0 голосов
/ 17 февраля 2016

Хотя это 5-летний вопрос, я все равно добавлю ответ, потому что утвержденный ответ неэффективен по сравнению с этим:

Используйте view.post() для выполнения кода после загрузки представления.

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