Жест очищается при изменении ориентации - PullRequest
1 голос
/ 15 апреля 2011

В моем макете есть gestOverlayView, который я использую для рисования цифровой подписи.Проблема возникает, когда я рисую в определенной ориентации (скажем, в альбомной), а затем меняю ориентацию - overlayView просто очищается.Я попытался в том числе onConfigurationChanged (), но безрезультатно.Я также попытался выполнить следующие действия с onSaveInstance и onRestoreInstance, но это не дает мне решения:

@Override
protected void onSaveInstanceState(Bundle outState) {
    Gesture gesture = overlay.getGesture();
    outState.putParcelable("gesture", (Parcelable) gesture);
    super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    Gesture gesture = (Gesture) savedInstanceState.getParcelable("gesture");
    overlay.setGesture(gesture);
    mDoneButton.setEnabled(true);
    super.onRestoreInstanceState(savedInstanceState);
}

Я также попытался в том числе:

  android:configChanges="fontScale|uiMode|screenLayout|navigation|touchscreen|mcc|mnc|orientation|keyboardHidden|keyboard">

Но даже это бесполезно.

У кого-нибудь есть решение этой проблемы?

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

Я попробовал ваш код в моем приложении, и у меня возникла та же проблема. Результат getGesture () равен нулю в onSaveInstanceState, onStop и onPause, поэтому я предполагаю, что GestureOverlayView недействителен где-то между поворотом экрана и вызовом этих методов.

Обходной путь - переопределить onGesturePerformed, предполагая, что ваша активность реализует OnGesturePerformedListener, и вы вызываете addOnGesturePerformedListener (this) в своем оверлее и сохраняете экземпляр члена самого последнего Gesture. Что-то вроде:

    @Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
    mCurrentGesture = gesture;
    }

Затем в вашем onSaveInstanceState просто получите и упакуйте экземпляр члена вместо вызова getGesture (). Теперь setGesture () должен работать так, как ожидалось, когда Activity воссоздает сам себя.

1 голос
/ 16 сентября 2012

Используйте android: configChanges = "fontScale | uiMode | screenLayout | navigation | touchscreen | mcc в манифесте или попробуйте onSavedInstance;

0 голосов
/ 10 мая 2011

Когда ориентация меняется, она возобновляет деятельность. Вы можете попробовать ограничить ориентацию приложения в файле манифеста.

андроид: screenOrientation = "портрет"

...