【问题标题】:How can I catch touch events in a TV leanback app to show video controls using VideoSupportFragment?如何使用 VideoSupportFragment 在 TV 倾斜应用程序中捕获触摸事件以显示视频控件?
【发布时间】:2019-11-18 02:34:16
【问题描述】:

我在带有触摸屏的设备上使用来自Leanback 库的VideoSupportFragment。我希望能够在触摸屏幕时显示视频控件,但我不知道如何启用它。是否有一些我可以连接的触摸或点击监听器?我尝试连接到surfaceView,但从来没有得到这个事件。

谢谢。

【问题讨论】:

    标签: android android-tv leanback


    【解决方案1】:

    由于您使用的是leanback 应用程序,因此您可以通过在您的活动中覆盖dispatchTouchEvent 方法来捕获触摸事件。

    这是假设您的活动扩展了 AppCompatActivity,它是 FragmentActivity 的后代。

    所以在你的活动中 -

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Fragment fragmentById = getSupportFragmentManager().findFragmentById(R.id.main_player_container);
        if (fragmentById instanceof BasePlayerFragment) {
            boolean consume = ((BasePlayerFragment) fragmentById).dispatchTouchEvent(ev);
            if (consume) {
                return true;
            }
        }
        return super.dispatchTouchEvent(ev);
    }
    

    然后在扩展 SupportVideoFragment 的片段中(在本例中为 BasePlayerFragment) -

    public boolean dispatchTouchEvent(MotionEvent ev) {
    
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            // You can choose to display the SurfaceView once screen is pressed before even waiting for it to be released
        }
        if (ev.getAction() == MotionEvent.ACTION_UP) {
            if (consumeViewSurface(ev)) {
                        return true;
            }
        }
    
        return false;
    }
    
    private boolean consumeViewSurface(MotionEvent ev) {
    
        if (mSurfaceView != null) {
            // Do your code here and return true for letting the system know you handled the event.
            return true;
        }
    
        // If the event didn't get handled return false
        return false;
    }
    

    确保在处理完事件后返回 true,否则返回 false。

    【讨论】:

    • 太棒了,成功了。我只需要弄清楚我是否可以告诉它一段时间后自行隐藏控件。谢谢。
    • 很高兴听到:)。要在一段时间后隐藏它,您可以使用 CountDownTimer 并在计时器 onFinish 回调中隐藏它。
    • 我希望让leanback代码处理超时,这样感觉就像库本身显示的一样,希望有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多