繁体   English   中英

如何使用 VideoSupportFragment 在 TV 倾斜应用程序中捕获触摸事件以显示视频控件?

[英]How can I catch touch events in a TV leanback app to show video controls using VideoSupportFragment?

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

谢谢。

由于您使用的是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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM