首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择textViews并获取它们的值

选择textViews并获取它们的值
EN

Stack Overflow用户
提问于 2012-05-01 23:58:54
回答 1查看 103关注 0票数 0

我正在努力完成以下事情

假设我有5-6个值为S N A K ETextViews

现在,我想按S textView,然后在N上滑动手指将其选中,然后移动到E。我想这样做,这样我就可以在我的字符串或字符序列中获得"SNAKE“等

如果有任何想法,请与我分享。我不明白如何在这里使用onTouch。另外,我会动态添加textViews,所以我也会动态设置他们的i

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-02 00:20:25

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

假设所有的文本视图都处于某种布局中,您可以禁用文本视图上的可聚焦功能,并在底层容器上创建一个onTouch侦听器。

开始跟踪鼠标按下事件

代码语言:javascript
运行
复制
@Override public boolean onTouch(View v, MotionEvent event) { 
    if(event.getAction == MotionEvent.ACTION_DOWN)
    {
         captureInput = true;
    }
}

*在ACTION_MOVE事件中,检查当前位置是否在文本视图之上,如果是,则捕获该值*

代码语言:javascript
运行
复制
@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());
               }
           }
     }


}

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

代码语言:javascript
运行
复制
@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
     }

}

再说一次,我不知道这是否可行,这只是一种方法的猜测。我怀疑循环遍历每个文本视图以检查重叠的性能将非常糟糕,因此可能有一种比运行for循环更有效的方法。

由于你知道你不能跳过字母时,你可以创建一个简短的列表,列出所有可能的滑动位置(周围的字母),每当你添加一个新的字母。然后在发生鼠标事件时,检查鼠标移动事件是否命中了这些字母中的任何一个。例如,在一个标准的单词搜索游戏中,一旦你选择了一个字母,只有9个其他可能的位置可供你滑动(周围的字母),所以你应该只在捕捉鼠标移动事件时检查这9个位置是否被击中。

编辑:如果你给每个文本视图都附加了一个onTouch监听器,我想你可以使用上面的解决方案。对于触摸,同样的前提也适用:向下=开始捕获,移动=捕获文本,向上=停止捕获。因为触发onTouch事件的textview将是用户正在滑动的那个textview,所以它将使您不必确定悬停在哪个textview上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10400401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档