0

我有一个带有 2 个选项卡的 TabActivity,其中包含一个响应 Scale 和 Scroll 事件的控件。

当我启动我的应用程序时,它从 Tab 1 开始,我可以缩放和滚动第一个 Tab 活动中显示的视图。

当我再次切换到选项卡 2 时,我可以缩放和滚动第二个选项卡活动中显示的视图。

一切看起来都不错。

当我突然切换回第一个选项卡时,我无法再缩放或滚动。如果我再次切换回第二个,那么那个工作正常。就好像触摸焦点被第二个选项卡上的视图所占据,并且从未被放弃。

我什至尝试过重新初始化我的 GestureDetectors,以防当一个 Activity 进入后台时它们以某种方式被破坏。

我试过以下代码无济于事:

public void onPause()
{
    super.onPause();
    mView.clearFocus();
}

public void onResume()
{
    super.onResume();
    mView.requestFocus();
    mView.InitGestureDetectors( this );
}

InitGestureDetectors 只需执行以下操作:

public void InitGestureDetectors( Context ctx )
{
    mScaleGestureDetector   = new ScaleGestureDetector( ctx, new ScaleGestureListener() );
    mGestureDetector        = new GestureDetector( ctx, new GestureListener() );
}

当我随后切换标签时,谁能告诉我如何让我的触摸手势再次工作?

4

1 回答 1

0

我最终找到了问题的根源。这是由用于在您更改选项卡时创建过渡动画的自定义 OnTabChangeListener 引起的。由于某种原因,这导致当视图移入后台时可见性状态未设置为 GONE。所以我添加了一个自定义 AnimationListener 以在 onAnimationEnd 和 onAnimationStart 中适当地设置可见性标志。

outAnim.setAnimationListener( new Animation.AnimationListener()
{
    public void onAnimationEnd( Animation animation )
    {
        outView.setVisibility( View.GONE );
    }

    public void onAnimationRepeat( Animation animation )
    {
    }

    public void onAnimationStart( Animation animation )
    {
        inView.setVisibility( View.VISIBLE );
    }
} );

现在我的触摸事件正在按我的预期处理!

于 2013-01-23T23:41:05.927 回答