Ho creato un componente personalizzato con un onTouchListener e un rilevatore di gesti, Inserisco il componente personalizzato nel file xml di MainActivity che ha anche sia onTouchEvent che un rilevatore di gesti. Voglio rilevare singoli tocchi sul componente personalizzato e premere a lungo su MainActivity, ma in qualche modo sembra che gli ascoltatori del tocco interagiscano e che i singoli tocchi non vengano mai rilevati.onSingleTapUp di SimpleOnGestureListener mai chiamato
MainActivity.java:
public class MainActivity extends ActionBarActivity {
private GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
detector = new GestureDetector(this, new LongPressDetector());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
detector.onTouchEvent(event);
int action = event.getActionMasked();
switch (action){
case MotionEvent.ACTION_DOWN:{
Log.d("TouchEvent", "Action_Down at MainActivity.java");
break;
}
}
return super.onTouchEvent(event);
}
private class LongPressDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
Log.d("TouchEvent", "onDown at MainActivity.java");
return super.onDown(e);
}
@Override
public void onLongPress(MotionEvent e) {
Log.d("TouchEvent", "onLongPress at MainActivity.java");
super.onLongPress(e);
}
}
}
CustomView.java:
public class CustomView extends RelativeLayout {
private GestureDetector detector;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context c){
LayoutInflater layoutInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.customview, this);
detector = new GestureDetector(c, new TapDetector());
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
int action = event.getActionMasked();
switch (action){
case MotionEvent.ACTION_DOWN:{
Log.d("TouchEvent", "Action_Down at CustomView.java");
break;
}
}
return false;
}
});
}
private class TapDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
Log.d("TouchEvent", "onDown at CustomView.java");
return super.onDown(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.d("TouchEvent", "onSingleTapUp at CustomView.java");
return super.onSingleTapUp(e);
}
}
}
aggiungere Log.d nel metodo onTouch e vedere gli eventi – pskink
che ho fatto, se mi toccare il componente personalizzato, gli eventi generati in ordine sono: onDown a CustomView. Giava; Action_Down su CustomView.java; onDown su MainActivity.java; Action_Down su MainActivity.java; ma non onSingleTapUp – daxter1992
e ora leggere la documentazione su ciò che omTouch ritorna – pskink