Search code examples
androideventsonclicklistenerontouch

Is it possible to use dragging events and click event on the same Textview?


In my application I got a requirement to use both click and drag events on the same textView.

I have written the following code:

... }
    switch(event.getAction()) {
        case MotionEvent.ACTION_UP:
//            TextDialog.setVisibility(View.VISIBLE);
            break;
        case MotionEvent.ACTION_DOWN: {
            disallowTouch(parent, true);
            int downX = (int)event.getX();
            int downY = (int)event.getY();
            return false; // allow other events like Click to be processed
        }
        case MotionEvent.ACTION_MOVE:
            int x = (int)event.getRawX();
            int y= (int)event.getRawY();

            layoutParams.leftMargin = x - 50;
            layoutParams.topMargin = y - 70;
                                       
            tvText.setLayoutParams(layoutParams);
            break;
        default:
            break;
    }
    return true;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    TextDialog.setVisibility(View.VISIBLE);
}

But only ACTION_MOVE is working. The onClick event is not getting fired.

I just want to display a dialog when clicking on the TextView.

How can I achieve this?


Solution

  • Use setOnTouchListener and setOnClickListener simultaneously

    in onTouch:

    public boolean onTouch(View v, MotionEvent event) {
        ViewParent parent = v.getParent();
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            disallowTouch(parent, true);
            downX = event.getX();
            downY = event.getY();
            return false; // allow other events like Click to be processed
        }
    }
    
    private void disallowTouch(ViewParent parent, boolean isDisallow) {
        if (parent != null) {
            parent.requestDisallowInterceptTouchEvent(isDisallow);
        }
    }