如何将旋转滚动监听器连接到Android Wear numberPicker?
我已经为此工作了一天,但还是没弄明白。我正在为Android Wear设备制作一个Android应用程序,我不知道如何检测设备上的旋转轮来获取滚动事件。我知道,默认情况下,旋转轮会被分配到ScrollView和ListView,等等。我已经让它工作了,但我不能让它在一个简单的NumberPicker上工作。正如GoogleAPI所建议的那样,我使用了OnGenericMotionListener,虽然它不会抛出任何错误,但仍然不会拾取任何内容 我想让数码表和转盘一起滚动。我的代码如下。logcat中没有显示任何错误:如何将旋转滚动监听器连接到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
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检查在清单中设置权限是否可以启用本节中所述的“运动”事件。