1

I would like to detect when a button is not clicked. For instance, in the code above, I would like to replace the ????? with a condition indicating that the imageview is still being clicked and quit the loop as soon as the imageview is not long clicked anymore. Do you have an idea?

imageView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            while(?????)
            {
                int number =(Integer.parseInt(hours.getText().toString())+1)%24;
                String text_number= String.valueOf(number);
                if(number>-1 && number<10)
                {
                    text_number="0"+text_number;
                }
                hours.setText(text_number);
            }

            return true;
        }
    });
Bazouk55555
  • 557
  • 6
  • 24

2 Answers2

1

Use View.OnTouchListener.

Example: https://stackoverflow.com/a/39588668/4586742

You will get onTouch callback with different events.

MotionEvent.ACTION_DOWN: when the user starts pressing the view.

MotionEvent.ACTION_UP: when the user stops pressing the view.

Bob
  • 13,447
  • 7
  • 35
  • 45
0

What i get from your question and proposed answer for you.

`

public class Main2Activity extends AppCompatActivity {

private boolean isImageViewBeingClicked = true;
private boolean isLongPressed = false;
private ImageView imageView;
private TextView hours;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);


    imageView = (ImageView) findViewById(R.id.imageView);
    hours = (TextView) findViewById(R.id.textView);

    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            while (isImageViewBeingClicked) {
                int number = (Integer.parseInt(hours.getText().toString()) + 1) % 24;
                String text_number = String.valueOf(number);
                if (number > -1 && number < 10) {
                    text_number = "0" + text_number;
                }
                hours.setText(text_number);
            }


        }
    });


    imageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                if (isLongPressed) {
                    isImageViewBeingClicked = false;
                }
            }
            return false;
        }
    });

    imageView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            isLongPressed = true;
            return false;
        }
    });

}
 }

`

Muhammad Maqsood
  • 1,622
  • 19
  • 25