方向改变时,手势会清除

时间:2011-04-15 06:00:50

标签: android database orientation config gesture

我的布局中有一个gestureOverlayView,用于绘制数字签名。当我以某个方向(比如风景)绘制然后改变方向时,问题就出现了 - 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 个答案:

答案 0 :(得分:2)

我在我的应用程序中尝试了您的代码并遇到了同样的问题。 getGesture()的结果在onSaveInstanceState,onStop和onPause中为null,所以我猜测GestureOverlayView在屏幕旋转和调用这些方法之间的某处无效。

解决方法是覆盖onGesturePerformed,假设您的Activity实现OnGesturePerformedListener并在覆盖上调用addOnGesturePerformedListener(this),并保存最新Gesture的成员实例。类似的东西:

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

然后在你的onSaveInstanceState中,只需获取并打包成员实例,而不是调用getGesture()。现在,当Activity重新创建时,setGesture()应该按预期工作。

答案 1 :(得分:1)

在清单中使用android:configChanges =“fontScale | uiMode | screenLayout | navigation | touchscreen | mcc”或尝试onSavedInstance;

答案 2 :(得分:0)

当方向改变时,它会重新启动活动。您可以尝试在清单文件中限制应用程序的方向。

  

机器人:screenOrientation = “纵向”