如何使用 VideoSupportFragment 在 TV Leanback 应用程序中捕获触摸事件以显示视频控件?
How can I catch touch events in a TV leanback app to show video controls using VideoSupportFragment?
我在带触摸屏的设备上使用 Leanback
库中的 VideoSupportFragment
。我希望能够在触摸屏幕时显示视频控件,但我不知道如何启用它。我可以连接一些触摸或点击监听器吗?我尝试连接到 surfaceView
但从未收到该事件。
谢谢。
由于您使用的是 Leanback 应用程序,因此您可以通过覆盖 activity 中的 dispatchTouchEvent 方法来捕获触摸事件。
这是假设您的 activity 扩展了 AppCompatActivity,它是 FragmentActivity 的后代。
所以在你的 activity -
@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;
}
确保在处理完事件后 return 为真,否则为假。
我在带触摸屏的设备上使用 Leanback
库中的 VideoSupportFragment
。我希望能够在触摸屏幕时显示视频控件,但我不知道如何启用它。我可以连接一些触摸或点击监听器吗?我尝试连接到 surfaceView
但从未收到该事件。
谢谢。
由于您使用的是 Leanback 应用程序,因此您可以通过覆盖 activity 中的 dispatchTouchEvent 方法来捕获触摸事件。
这是假设您的 activity 扩展了 AppCompatActivity,它是 FragmentActivity 的后代。
所以在你的 activity -
@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;
}
确保在处理完事件后 return 为真,否则为假。