我正在尝试使用OnDragListener
将TextView
设置为SpannableString
的某些字词。我可以使用OnClick
ClickableSpan
监听器
做
hashText.setSpan(new ClickableSpan() {
所以我想我会尝试相同但用ClickableSpan
替换OnDragListener
。
我能够阅读不同的拖动事件,但我无法将拖动事件与我选择的特定单词隔离开来,因为我可以使用ClickableSpan
。
hashText.setSpan(new View.OnDragListener() {
@Override
public boolean onDrag(View targetView, DragEvent event) {
int action = event.getAction();
TextView targetVariable = (TextView) targetView;
String textGetter;
textGetter = targetVariable.getText().toString();
// boolean actionDropOutside = (DragEvent.ACTION_DRAG_ENDED != DragEvent.ACTION_DROP);
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
Log.d(TAG, "DRAG STARTED");
break;
case DragEvent.ACTION_DRAG_ENTERED:
////create method that checks if text is empty if so lights up
//if (textGetter.equals("")) {
targetView.setBackgroundColor(CARD_SLECTED);
//lightupVariableCard(cardV);
Log.d(TAG, "DRAG ENTERED EMPTY TEXT");
//}
Log.d(TAG, "DRAG ENTERED" + targetVariable.getText().toString());
break;
case DragEvent.ACTION_DRAG_EXITED:
targetView.setBackgroundColor(CARD_UNSLECTED);
Log.d(TAG, "DRAG EXITED");
break;
case DragEvent.ACTION_DROP:
// Dropped, reassign View to ViewGroup
//if (textGetter.equals("")) {
TextView draggedView = (TextView) event.getLocalState();
ViewGroup owner = (ViewGroup) draggedView.getParent();
targetVariable.setText(draggedView.getText());
owner.setVisibility(View.INVISIBLE);
targetView.setBackgroundColor(CARD_UNSLECTED);
//fabDisplayCounter++;
//displayFab();
Log.d(TAG, "DRAG DROPPED");
//}
Log.d(TAG, "DRAG NOT POSSSIBLE HERE");
break;
case DragEvent.ACTION_DRAG_ENDED:
// if (actionDropOutside == true){
// Log.d(TAG, "DRAG DROPPED OUTSIDE TRUE");
// }
Log.d(TAG, "DRAG ENDED");
//default:
}
return true;
}
}, matcher.start(), matcher.end(), i);
the_question.setText(hashText);
the_question.setMovementMethod(LinkMovementMethod.getInstance());
//the_question.setOnDragListener(new MyDragListener(hashText.nextSpanTransition()));
答案 0 :(得分:2)
我不是这个领域的大专家,从来没有把它挖出来。但由于你没有回复,我试着给你一些提示/方向。
我认为您需要的是自定义MovementMethod
。
Android平台MovementMethod
在此包内管理:
https://github.com/android/platform_frameworks_base/tree/master/core/java/android/text/method
如您所见,它有onTouchEvent()
方法。
ClickableSpan
有一个onClick方法,但它才有效,因为有LinkMovementMethod
处理触摸事件,查找ClickableSpan
并在其上发出onClick()
。
但这最后与触摸无关。
ScrollingMovementMethod
使用课程Touch
委派触摸事件处理,您可以在此处查看此课程:
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/Touch.java
快速查看代码我认为您可以扩展LinkMovementMethod
并在那里添加拖动检测。然后为Drag创建一个新的Span
类型,并调用其中的拖动方法。
我知道我没有给你一个解决方案,但我希望我指出你正确的方向。