我已经在这工作了一天,但仍然无法弄明白。我正在为Android Wear设备制作Android应用程序,但我无法弄清楚如何检测设备上的旋转轮以获取滚动事件。我知道默认情况下,旋转轮被分配给ScrollViews和Listviews等,我已经开始工作了,但是我不能让它在一个简单的NumberPicker上工作。正如Google API所建议的那样,我使用了OnGenericMotionListener,虽然它没有引发任何错误,但它仍然没有发现任何错误。
我希望NumberPicker用旋转滚轮滚动。我的代码如下。 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;
}
});
答案 0 :(得分:0)
我认为你正在寻找这个:
Add custom rotary input scrolling:
如果您的可滚动视图本身不支持旋转输入 滚动,或者如果你想做除滚动之外的其他事情 响应旋转输入事件(放大/缩小,转动拨号等),你 可以使用可穿戴支持库中的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中旋转事件的完整指南 磨损。
答案 1 :(得分:0)
文档有点令人困惑,但它就在那里,注意下一段:
- 旋转输入事件仅发送到焦点视图。这些事件 不要冒泡视图层次结构。如果没有焦点视图,或者 如果焦点视图从View.onGenericMotionEvent返回false, 然后(并且只有那时)事件被发送到 Activity.onGenericMotionEvent。
基本上你所要做的就是覆盖onGenericMotionEvent上的Activity,如下所示:
@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;
}
这就是你的活动将收到所有旋转输入事件。