onTouchEvent onClick onLongClick调用

And*_*Dev 11 android touch-event onlongclicklistener

在我们的应用程序中,我们处理按钮中的事件以记录数据.

所以最初当我使用setOnLongClickListener()setOnClickListener()使用相同的按钮时,它对我们来说很好.

这意味着它将基于Click和LongClick按钮调用此侦听器.现在,当我尝试使用setOnTouchListener()相同的按钮setOnLongClickListener(),setOnClickListener()然后只有OnTouch事件正在工作,休息onclick和onLongclick事件不起作用.

任何人都可以告诉我为什么会发生这种情况,如果可能的话,请举例说明

我使用的代码是..

Button btnAdd=new Button(this)

btnAdd.setOnLongClickListener(this);

btnAdd.setOnClickListener(this);

btnAdd.setOnTouchClickListener(this);

public void onClick(View v)
{
    //Statements;
}

public void onLongClick(View v)
{
    //Statements;
}

public boolean onTouch(View v, MotionEvent e) 
{
    switch (e.getAction())
    {
        case MotionEvent.ACTION_DOWN:
        {
            //store the X value when the user's finger was pressed down
            m_downXValue = e.getX();
            break;
        }   

        case MotionEvent.ACTION_UP:
        {
            //Get the X value when the user released his/her finger
            float currentX = e.getX();              
            //MotionEvent x=MotionEvent.obtain((long) m_downXValue,  SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 1, 1, 1, 1,0, 0, 0, 0, 0);

            // going forwards: pushing stuff to the left
            if (m_downXValue > currentX && currentX < 0)
            {                   
                ViewFlipper vf = (ViewFlipper) findViewById(R.id.flipview);
                vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_left));


                vf.showNext();

            }

            // going backwards: pushing stuff to the right
            if (m_downXValue < currentX && currentX > 100)
            {                   
                ViewFlipper vf = (ViewFlipper) findViewById(R.id.flipview);                                     
                vf.setAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right));


                vf.showPrevious();

            }   

            if (m_downXValue == currentX)
            {                   
                onClick(v);
            }    

            break;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

xev*_*ent 23

根据doc Handling UI Events,

onLongClick() - 返回一个布尔值,表示您是否已经消耗了该事件,并且不应该进一步携带它.也就是说,返回true表示你已经处理了这个事件,它应该在这里停止; 如果您尚未处理它并且/或该事件应继续到任何其他点击监听器,则返回false.

最重要的是关于onTouch:

onTouch() - 返回一个布尔值,指示您的侦听器是否使用此事件.重要的是这个事件可以有多个相互跟随的动作.因此,如果在收到向下操作事件时返回false,则表示您尚未使用该事件,并且对此事件的后续操作也不感兴趣.因此,您不会在事件中调用任何其他操作,例如手指手势或最终的上行动作事件.

实际上,根据事件,您必须返回正确的值.