选择textViews并获取它们的值

时间:2012-05-01 15:58:54

标签: java android

我正在努力完成以下事情

假设我有5-6 TextViews,其值为S N A K E

现在,我想按S textView然后将我的手指滑过N以选择它,然后移动到我的路。我想这样做,以便我可以得到“{{ 1}}“在我的字符串或字符序列等

如果有任何想法,请与我分享。我无法理解如何在这里使用SNAKE。 此外,我动态添加onTouch所以我也动态设置他们的ID 最诚挚的问候

1 个答案:

答案 0 :(得分:0)

我从来没有这样做,但这是一个想法。

假设您的所有文本视图都采用某种布局,您可以在textview上禁用可聚焦性,并在底层容器上创建onTouch侦听器。

开始跟踪鼠标停止事件

@Override public boolean onTouch(View v, MotionEvent event) { 
    if(event.getAction == MotionEvent.ACTION_DOWN)
    {
         captureInput = true;
    }
}

*在您的ACTION_MOVE事件中,检查当前位置是否高于文本视图,如果是,请捕获该值*

@Override public boolean onTouch(View v, MotionEvent event) { 
    int action = event.getAction();

    if(action == MotionEvent.ACTION_DOWN)
    {
         captureInput = true;
    }
    else if(action == MotionEvent.ACTION_MOVE
    {
        //get x/y of your finger
         int X = (int)event.getX();   
         int Y = (int)event.getY();

        //Somehow check if the x,y are overlapping with one of your textivews
        // If so, add that textview's text to your list
        // Below is pseudo code
        /* for(TextView curTV: allTextViews)
           {
               if(isOverlapping(X,Y))
               {
                   listOfSwipedCharacters.add(curTV.getText());
               }
           }
     }


}

最后,当用户松开手指时,停止跟踪并使用单词列表执行某些操作

@Override public boolean onTouch(View v, MotionEvent event) { 
    int action = event.getAction();

    if(action == MotionEvent.ACTION_DOWN)
    {
         captureInput = true;
    }
    else if(action == MotionEvent.ACTION_MOVE
    {
        //get x/y of your finger
         int X = (int)event.getX();   
         int Y = (int)event.getY();

        //Somehow check which textview the X,Y coords are overlapping
        // Below is pseudo code
        /* for(TextView curTV: allTextViews)
           {
               if(isOverlapping(X,Y))
               {
                   listOfSwipedCharacters += (curTV.getText());
               }
           }*/
     }
     else if(action == MotionEvent.ACTION_UP)
     {
         captureInput = false;
         //Do whatever you want with the string of information that you've captured
     }

}

再一次,我不知道这是否会起作用,只是猜测一种方法。我怀疑在每个textview中循环以检查重叠的性能会非常糟糕,因此可能有一种比运行for循环更有效的方法。

由于您知道在进行swyping时无法跳过字母,因此无论何时添加新字母,都可以创建所有可能的滑动位置(周围字母)的简短列表。然后在鼠标事件上,检查鼠标移动事件是否有任何字母被击中。例如,在一个标准的单词搜索游戏中,一旦你选择一个字母,你只有9个其他可能的位置可以滑动(周围的字母),所以你应该只是在你捕捉到这些9个位置时是否已经被击中鼠标移动事件。

编辑:如果你将onTouch监听器附加到每个和每个textview,我想你可以使用上面的解决方案。关于触摸的相同前提将适用:向下=开始捕获,移动=捕获文本,向上=停止捕获。这将使您不必识别哪个textview正在被悬停,因为触发onTouch事件的textview将是用户正在滑过的那个。

相关问题