2012-09-06 43 views
1

我有8个按钮我希望应用通过在屏幕上滚动而不是通过触摸来检测按钮?像果冻豆的可访问性功能?我不知道如何将该功能称为?手势?动感?在Android中没有触摸感应的检测按钮

这可能吗?我应该寻找什么?

谢谢!

回答

1

默认情况下,Android中的UI元素可以通过滚动球,箭头键等进行关注...视图具有View.setOnFocusChangedListener回调。您也可以以编程方式设置元素的焦点。

我很快编写了一些示例代码,没有测试。

float initialX = 0; 
float initialY = 0; 
int currentFocusedChild = 0; 
List<View> children; 

public void walkElements() { 
    final LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_layout); 
    children = mainLayout.getFocusables(View.FOCUS_FORWARD); 
    mainLayout.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        initialX = event.getX(); 
        initialY = event.getY();       
        break; 
       case MotionEvent.ACTION_MOVE: 
        float diffX = event.getX() - initialX; 
        float diffY = event.getY() - initialY; 

        if(diffY > 0) { 
         if (currentFocusedChild < children.size() - 1) { 
          currentFocusedChild++; 
         } 
        } else { 
         if (currentFocusedChild > 0) { 
          currentFocusedChild--; 
         } 
        } 
        children.get(currentFocusedChild).setSelected(true); 

        //Sleep for a period of time so the selection is slow enough for the user. 
        Thread.sleep(300); 
        break; 
       case MotionEvent.ACTION_UP: 
        children.get(currentFocusedChild).performClick(); 
        break; 
      } 
      return false; 
     } 
    }); 

} 
+0

我们不使用滚动这里...我想我必须重新句话我说的话 - 要打开AA按钮,我们在屏幕上触摸相应的按钮右侧,而不是,我只想碰屏幕一次而不移开我的手我想在屏幕上滚动到下一个按钮。这可能吗? – TheDevMan

+0

您需要在根视图上实现onTouchGestureListener,使用X/Y位置跟踪ACTION_DOWN事件,然后遍历视图的子视图以查找可聚焦的项目。 – tsmith

+0

感谢Ty S.你有没有人做过的链接和例子? – TheDevMan