我实现了像soo ....的onDragListener。
private final class MyDragListener implements OnDragListener {
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
System.out.println("STARTED");
break;
case DragEvent.ACTION_DRAG_ENTERED:
System.out.println("ENTERED");
break;
case DragEvent.ACTION_DRAG_EXITED:
System.out.println("EXITED");
break;
case DragEvent.ACTION_DROP:
System.out.println("DROP");
myOnClickListener.onClick(v);
break;
case DragEvent.ACTION_DRAG_ENDED:
System.out.println("ENDED");
break;
}
return true;
}
}
并将其设置为
for (int i = 0; i < 64; i++) {
boardLayout.getChildAt(i).setOnDragListener(myDragListener);
}
注意 boardLayout 是8x8 GridLayout
当我点击或拖动或其他任何内容时,模拟器中没有任何反应,任何想法为什么?
当我在onClickListener中制作时,一切都很完美,所以我有理由相信模拟器不知道我试图拖动...
答案 0 :(得分:1)
您需要在每个孩子中注册onTouchListener()
。
for (int i = 0; i < 64; i++) {view.getChildAt(i).setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
});
}
现在这应该有效。我引自Vogella
您正在打印输出。请参阅输出窗口。
但是在android Log.i(String, String)
方法中建议用于调试目的。希望能帮助到你!