在Android TV中自定义滚动

时间:2017-05-02 13:03:44

标签: android android-scrollview android-tv

我需要一个像这样的用户界面的电视应用程序:

UI prototype

当按下远程视频信息上的上/下按钮时,应该折叠,然后网格应该滚动,之后新的视频信息应该展开。

每行都单独加载并有自己的分页。

我使用内置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?

2 个答案:

答案 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(),您可以获取所选项目的位置和数据,您可以轻松地显示信息悬停。