【问题标题】:On Drag Listener multiple IF statements在拖动侦听器多个 IF 语句
【发布时间】:2014-03-01 06:49:06
【问题描述】:

我正在制作一个 Letter Drag n Drop 游戏(有点像 Guess the Brand),其中你有一张图片,你必须将字母拖到布局中以形成正确的答案。

在顶部,我有四个布局(layoutAnsw A 到 D),在底部我有四个按钮 (btnTop A 到 D) 我的 OnTouchListener 和 OnDragListener 工作正常,除了一件事。

当我有多个相似的字符(字母)时会发生什么? 例如在这张图片中:

如您所见,我必须将需要拖动的“A”字母,并且无论您先放置哪个字母,我都想这样做。在我的代码中,我设法得到了这样的东西:

“如果第一个 A 在第一个空间中,那么第二个 A 进入第二个空间”

我正在尝试以另一种方式编写代码,包括之前的语句。 到目前为止,我的代码让您可以在任何空格中放置任何“A”,包括在同一空格中的 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();
}

【问题讨论】:

    标签: android android-fragments drag-and-drop drag ontouchlistener


    【解决方案1】:

    经过大量阅读,我发现了非常简单的一行:

    getChildCount() 
    

    使用它作为条件,只要已经有另一个视图,它只会返回 false

    int i = container.getChildCount();
    if (i < 1) {
    // Do Something
    } else if (i == 1) {
    return false;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 2022-12-03
      • 2018-01-26
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多