如何将旋转滚动监听器连接到Android Wear numberPicker?

如何将旋转滚动监听器连接到Android Wear numberPicker?,android,wear-os,android-wear-2.0,Android,Wear Os,Android Wear 2.0,我已经为此工作了一天,但还是没弄明白。我正在为Android Wear设备制作一个Android应用程序,我不知道如何检测设备上的旋转轮来获取滚动事件。我知道,默认情况下,旋转轮会被分配到ScrollView和ListView,等等。我已经让它工作了,但我不能让它在一个简单的NumberPicker上工作。正如GoogleAPI所建议的那样,我使用了OnGenericMotionListener,虽然它不会抛出任何错误,但仍然不会拾取任何内容 我想让数码表和转盘一起滚动。我的代码如下。logca

我已经为此工作了一天,但还是没弄明白。我正在为Android Wear设备制作一个Android应用程序,我不知道如何检测设备上的旋转轮来获取滚动事件。我知道,默认情况下,旋转轮会被分配到ScrollView和ListView,等等。我已经让它工作了,但我不能让它在一个简单的NumberPicker上工作。正如GoogleAPI所建议的那样,我使用了OnGenericMotionListener,虽然它不会抛出任何错误,但仍然不会拾取任何内容

我想让数码表和转盘一起滚动。我的代码如下。logcat中没有显示任何错误:

                MyActivity.this.setContentView(R.layout.number_picker);
                NumberPicker numberPicker = (NumberPicker) findViewById(R.id.numberPicker1);
                numberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
                numberPicker.setMaxValue(100);       
                numberPicker.setMinValue(0);   
                numberPicker.setWrapSelectorWheel(true);
                numberPicker.setOnValueChangedListener( new NumberPicker.
                    OnValueChangeListener() {
                    public void onValueChange(NumberPicker picker, int
                        oldVal, int newVal) {

                    }          
                });
                numberPicker.setOnGenericMotionListener(new OnGenericMotionListener() {
                    @Override
                    public boolean onGenericMotion(View v, MotionEvent event) {

                        Log.i(TAG, "Received scroll event:" + event.getAction());
                        switch (event.getAction()) {
                        case MotionEvent.ACTION_SCROLL:             

                        }
                        return false;
                    }
                });

我想你在找这个:

:

如果您的可滚动视图本机不支持旋转输入 滚动,或者如果您不想在 响应旋转输入事件(放大/缩小、旋转刻度盘等),您可以 可以使用可穿戴支持库中的RotaryEncoder方法

下面的代码片段显示了如何使用RotaryEncoder添加 在应用程序视图中自定义滚动:

myView.setOnGenericMotionListener(new View.OnGenericMotionListener() {
    @Override
    public boolean onGenericMotion(View v, MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_SCROLL && RotaryEncoder.isFromRotaryEncoder(ev)) {
            // Don't forget the negation here
            float delta = -RotaryEncoder.getRotaryAxisValue(ev) * RotaryEncoder.getScaledScrollFactor(
            getContext());

            // Swap these axes if you want to do horizontal scrolling instead
            scrollBy(0, Math.round(delta));

            return true;
        }

        return false;
    }
});
无论如何,你可以在android中查看关于扶轮活动的完整指南
磨损。

文档有点混乱,但都在那里,请注意下一段:

  • 旋转输入事件仅发送到聚焦视图。这些事件 不要在视图层次上冒泡。如果没有聚焦视图,或 如果聚焦视图从view.onGenericMotionEvent返回false, 然后(并且只有那时)事件才会被发送到 Activity.onGenericMotionEvent
基本上,您所要做的就是覆盖您的系统,如下所示:

    @Override
    public boolean onGenericMotion(View v, MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_SCROLL && RotaryEncoder.isFromRotaryEncoder(ev)) {
            // Don't forget the negation here
            float delta = -RotaryEncoder.getRotaryAxisValue(ev) * RotaryEncoder.getScaledScrollFactor(
            getContext());

            // Swap these axes if you want to do horizontal scrolling instead
            scrollBy(0, Math.round(delta));

            return true;
        }

        return false;
    }

也就是说,你的活动将接收所有的旋转输入事件。

这基本上就是我已经在使用的代码(除了使用float和scrollBy项)。问题是代码根本没有拾取MotionEvents。@好的。Kindley检查在清单中设置权限是否可以启用本节中所述的“运动”事件。