【问题标题】:Customize scrolling in Android TV在 Android TV 中自定义滚动
【发布时间】:2017-05-02 13:03:43
【问题描述】:

我需要一个具有这样 UI 的电视应用程序:

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

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

我用ScrollViewRecyclerViews 实现了它。但是动画并不流畅,因为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);
    }
 }

这不起作用,onKeyUponKeyDown 永远不会被调用。

我发现捕获关键事件的唯一方法是在 Activity 中覆盖 onKeyDown。这个函数被称为罚款。但这似乎是一个丑陋的解决方案。 在电视应用的视图中,我还能做些什么来处理来自遥控器的关键事件?

是否有可能使用倾斜控件制作这样的 UI?

【问题讨论】:

标签: android android-scrollview android-tv


【解决方案1】:

您可以尝试使用 ObersvableScrollView。在 onScrollChanged() 上设置回调监听器(如下所述) - 更新 UI。此外,在活动的 onKeyDown 事件中,您可以将 observalbeScrollView 滚动到所需的 y 位置。 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) {

                }
            });

【讨论】:

    【解决方案2】:

    您可以使用leanback API 的BrowseFragment 组件。有一些像 onItemSelected() 这样的回调方法,您可以获取所选项目的位置和数据,您可以轻松地显示信息悬停。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 2011-11-10
      • 1970-01-01
      • 2017-02-12
      相关资源
      最近更新 更多