我需要一个像这样的用户界面的电视应用程序:
当按下远程视频信息上的上/下按钮时,应该折叠,然后网格应该滚动,之后新的视频信息应该展开。
每行都单独加载并有自己的分页。
我使用内置ScrollView
的{{1}}实现了它。但动画并不流畅,因为RecyclerViews
首先滚动一点,然后开始我的自定义动画。我想抑制向上/向下按钮上的滚动单击并手动处理它们。我做了一个ScrollView
后代并尝试覆盖一些东西。
ScrollView
这不起作用,永远不会调用public class VideoSelector extends ScrollView {
public VideoSelector(Context context, AttributeSet attrs) {
super(context, attrs);
setVerticalScrollBarEnabled(false);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
@Override
public boolean canScrollVertically(int direction) {
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
DPLog.i("ScrollView onTouchEvent: %s", event.toString());
return super.onTouchEvent(event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
DPLog.i("ScrollView key down: %s", event.toString());
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
DPLog.i("ScrollView key up: %s", event.toString());
return super.onKeyUp(keyCode, event);
}
}
或onKeyUp
。
我发现捕获关键事件的唯一方法是覆盖onKeyDown
中的onKeyDown
。这个功能称为罚款。但这似乎是一个丑陋的解决方案。
我还可以做些什么来处理电视应用中的远程视频中的关键事件?
是否可以使用leanback控件制作这样的UI?
答案 0 :(得分:0)
您可以尝试使用ObersvableScrollView。在onScrollChanged()上更新UI设置回调侦听器(如下所述)。此外,在活动的onKeyDown事件中,您可以将observalbeScrollView滚动到所需的y位置ex。的 observableScrollView.scrollVerticallyTo(100)强>
observableScrollView.setScrollViewCallbacks(new ObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) {
}
@Override
public void onDownMotionEvent() {
}
@Override
public void onUpOrCancelMotionEvent(ScrollState scrollState) {
}
});
答案 1 :(得分:0)
您可以使用leanback API的BrowseFragment组件。有一些回调方法,如onItemSelected(),您可以获取所选项目的位置和数据,您可以轻松地显示信息悬停。