如果onClick方法中的语句没有执行

时间:2018-02-13 14:16:15

标签: android if-statement onclicklistener

我有两种观点,在这种情况下circleView1circleView2。你必须同时触摸它们,以便它们移动到屏幕上的随机位置。

这就是我onClickListener的样子:

View.OnClickListener ocl = new View.OnClickListener() {

                    public void onClick(View v) {

                        if (circleView1.isPressed() && circleView2.isPressed()) {
                            setCirclesRandomPosition(circleView1, circleView2);
                            counter++;
                            scoreGM2.setText(Integer.toString(counter));
                            startGame2.setVisibility(View.INVISIBLE);
                        }


                        if (circleView1.isPressed() && circleView2.isPressed() && counter == 1) {
                            timer.start();
                        }
                    }
        };

        circleView1.setOnClickListener(ocl);
        circleView2.setOnClickListener(ocl);

执行以下代码

if (circleView1.isPressed() && circleView2.isPressed() && counter == 1) {timer.start();}

但这不是

if (circleView1.isPressed() && circleView2.isPressed()) {
                            setCirclesRandomPosition(circleView1, circleView2);
                            counter++;
                            scoreGM2.setText(Integer.toString(counter));
                            startGame2.setVisibility(View.INVISIBLE);
                        }

来自另一个类的“相同”代码只使用一个视图,如下所示:

neoncircle.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               setCircleRandomPosition(neoncircle);
               counter++;
               scoreGM1.setText(Integer.toString(counter));
               startGame1.setVisibility(View.INVISIBLE);

               if (counter == 1) {
                   timer.start();
               }
           }
       });

onClickListenercircleView1的{​​{1}}看起来与一个视图不同,因为这是我找出如何让它同时支持两次点击的唯一方法。

我没有发布整个代码,因为它真的很长。但如果你需要整个代码,我会发布它。

修改

我尝试了 @matdev 的建议,但现在触摸两个视图时没有任何反应。他们就呆在那里。

这是代码

circleView2

2 个答案:

答案 0 :(得分:0)

您应该使用OnTouchListener跟踪多次触摸,而不是OnClickListener。

以下是一个代码示例,可帮助您入门:

View.OnTouchListener otl = new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

            int maskedAction = event.getActionMasked();

            switch (maskedAction) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_POINTER_DOWN: {

                    counter++;
                    if (counter == 2) {

                        Log.i(getClass().getName(), "onTouch() pointerCount = 2 !");
                        // Your code ...
                        //setCirclesRandomPosition(circleView1, circleView2);
                        //scoreGM2.setText(Integer.toString(counter));
                        //startGame2.setVisibility(View.INVISIBLE);
                    }
                    break;
                }

                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_POINTER_UP:
                case MotionEvent.ACTION_CANCEL: {
                    counter--;
                    break;
                }
            }

        return true;
    }
};

circleView1.setOnTouchListener(otl);
circleView2.setOnTouchListener(otl);

有关在Android上处理多重触控的更多信息: http://www.vogella.com/tutorials/AndroidTouch/article.html

答案 1 :(得分:0)

您可以像以前一样调用此方法。 而不是检查两个点击监听器,最好是在点击监听器内部。

neoncircle.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               setCircleRandomPosition(neoncircle);
               counter++;
               scoreGM1.setText(Integer.toString(counter));
               startGame1.setVisibility(View.INVISIBLE);

               if (counter == 1) {
                   timer.start();
               }
           }
       });