При перетаскивании прослушивателя несколько операторов IF
Я делаю букву Drag n Drop game (вроде Угадай бренд), где у вас есть изображение, и вы должны перетащить Буквы в макеты, чтобы сформировать правильный ответ.
В верхней части у меня есть четыре макета (layoutAnsw от A до D), а в нижней части у меня есть четыре кнопки (btnTop A - D) У меня Онтоухлистенер и Ондраглистенер работают нормально, за исключением одной вещи.
Что происходит, когда у меня есть более одного похожего символа (буквы)? Например в этом изображение:
Как вы можете видеть, у меня есть буквы" А", которые нужно перетащить, и я хочу сделать это независимо от того, какой из них вы ставите первым. В моем коде мне удалось получить что-то вроде этого:"Если первый а находится в первом пространстве, то второй а переходит во второе пространство"
Я пытаюсь кодировать наоборот, включая это предыдущее утверждение. Мой код до сих пор позволяет вам поставить любую букву " А " в любом пространстве, включая 2 буквы в том же пространстве. Довольно бесполезный.
Мой код так далеко
public class OneQuestionA extends Fragment implements OnTouchListener,
OnDragListener {
protected static final String LOGCAT = null;
int numDragged = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View rootView = inflater.inflate(R.layout.questions_fragment5,
container, false);
btnTopA.setOnTouchListener(this); // Letter A
btnTopB.setOnTouchListener(this); // Second Letter A
btnTopC.setOnTouchListener(this);
btnTopD.setOnTouchListener(this);
rootView.findViewById(R.id.layoutAnswA).setOnDragListener(this); // Layout 1
rootView.findViewById(R.id.layoutAnswB).setOnDragListener(this); // Layout 2
rootView.findViewById(R.id.layoutAnswC).setOnDragListener(this); // Layout 3
rootView.findViewById(R.id.layoutAnswD).setOnDragListener(this); // Layout 4
return rootView;
}
Моя реализация onTouch:
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// TODO Auto-generated method stub
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(null, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
}
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
view.setVisibility(View.VISIBLE);
return true;
} else {
return false;
}
}
Моя реализация onDrag:
@Override
public boolean onDrag(View v, DragEvent e) {
int action = e.getAction();
View view = (View) e.getLocalState();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
return true;
case DragEvent.ACTION_DRAG_ENTERED:
return false;
case DragEvent.ACTION_DRAG_LOCATION:
return false;
case DragEvent.ACTION_DRAG_EXITED:
return false;
case DragEvent.ACTION_DROP:
if (view.getId() == R.id.btnTopA && v.getId() == R.id.layoutAnswA) {
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
LinearLayout container = (LinearLayout) v;
container.addView(view);
view.setVisibility(View.VISIBLE);
view.setOnTouchListener(null);
view.setOnDragListener(null);
numDragged++;
} else if (view.getId() == R.id.btnTopB && v.getId() == R.id.layoutAnswB) {
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
LinearLayout container = (LinearLayout) v;
container.addView(view);
view.setVisibility(View.VISIBLE);
view.setOnTouchListener(null);
view.setOnDragListener(null);
numDragged++;
}
}
if (numDragged >= 4) {
numDragged = 0;
Toast.makeText(getActivity(),
"All buttons in the Right place", Toast.LENGTH_SHORT)
.show();
}
case DragEvent.ACTION_DRAG_ENDED:
if (dropEventNotHandled(e)) {
view.setVisibility(View.VISIBLE);
}
}
return false;
}
private boolean dropEventNotHandled(DragEvent e) {
// TODO Auto-generated method stub
return !e.getResult();
}