I am creating an appliction in which a line gets generated between two points given at runtime.
The problem that I see is that onTouch()
is called twice for
Sometimes dealing with many views under the same parent cause the onTouch called many times (if they're above each other) the solution for me was
onTouch{ ...
if(event.getAction() == MotionEvent.ACTION_DOWN && isTouchEnabled()){
enableTouch(false);
//add your code here
//then enableTouch at the end
this.postDelayed(new Runnable() {
@Override
public void run() {
enableTouch(true);
}
}, 500);
}
add static variable touch
private static boolean enabled = true;
private void enableTouch(boolean enabled){
this.enabled = enabled;
}
private boolean isTouchEnabled(){
return enabled;
}
touchListener will be called for every MotionEvent.ACTION_DOWN
, MotionEvent.ACTION_UP
, and MotionEvent.ACTION_MOVE
. so if you want to execute code only once , ie MotionEvent.ACTION_DOWN
then inside
onTouch()
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//your code
}
Or just use onClickListener:
myButton.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
//do what you gotta do
}
});