我正在努力完成以下事情
假设我有5-6 TextViews
,其值为S N A K E
现在,我想按S
textView然后将我的手指滑过N
以选择它,然后移动到我的路。我想这样做,以便我可以得到“{{ 1}}“在我的字符串或字符序列等
如果有任何想法,请与我分享。我无法理解如何在这里使用SNAKE
。
此外,我动态添加onTouch
所以我也动态设置他们的ID
最诚挚的问候
答案 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将是用户正在滑过的那个。