JavascriptProva

mercoledì 11 maggio 2016

Estrapolare l'indice del puntatore

Facciamo una sequenza e analizziamo i valori di MotionEvent...
indice giù       down: 0
                 down MASK: 0

medio giù        pointer down: 261
                 pointer down MASK: 5

medio su         pointer up: 262
                 pointer up MASK: 6

indice su        up: 1 
                 up MASK: 1


indice giù        down: 0
                  down MASK: 0

medio giù         pointer down: 261
                  pointer down MASK: 5

indice su         pointer up: 6
                  pointer up MASK: 6

medio su          up: 1
                  up MASK: 1

Quando c'è un solo dito giù viene riconosciuto come puntatore principale, quando ce ne sono due l'ultimo ad essere stato aggiunto viene riconosciuto come puntatore secondario.
Quando ci sono due dita giù, il primo a sollevarsi viene riconosciuto come puntatore secondario, quindi ne rimane uno viene riconosciuto come puntatore primario.

Però c'è una differenza:
L'ultimo bit del byte alto viene attribuito a 0 per il primo puntatore, a 1 per il puntatore secondario, ma quando il primo puntatore diventa secondario continua ad avere codice 0.
Estrapoliamo dunque il codice del puntatore...

   OnTouchListener onTouchListener=new View.OnTouchListener(){
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    switch(event.getAction() & event.ACTION_MASK){
    case MotionEvent.ACTION_DOWN:
     Log.e("event.getAction() down",""+event.getAction());
     Log.e("event.getAction() down MASK",""+(event.getAction() & event.ACTION_MASK));
     Log.e("CODICE DEL PUNTATORE",""+((event.getAction() & 65280)>>8));
     break; 
    case MotionEvent.ACTION_POINTER_DOWN:
     Log.e("event.getAction() pointer down",""+event.getAction());
     Log.e("event.getAction() pointer down MASK",""+(event.getAction() & event.ACTION_MASK));
     Log.e("CODICE DEL PUNTATORE",""+((event.getAction() & 65280)>>8));
     break;
    case MotionEvent.ACTION_POINTER_UP:
     Log.e("event.getAction() pointer up",""+event.getAction());
     Log.e("event.getAction() pointer up MASK",""+(event.getAction() & event.ACTION_MASK));
     Log.e("CODICE DEL PUNTATORE",""+((event.getAction() & 65280)>>8));
     break;    
    case MotionEvent.ACTION_UP:
     Log.e("event.getAction() up",""+event.getAction());
     Log.e("event.getAction() up MASK",""+(event.getAction() & event.ACTION_MASK));
     Log.e("CODICE DEL PUNTATORE",""+((event.getAction() & 65280)>>8));
     break;
    }
    return true;
   }
  };
Con questo codice ho creato una maschera di due bytes con 0xFF00, in modo da isolare il byte alto, e poi l'ho spinto in fondo con l'operazione >>8.
Mi mostra che il codice, quando i punatori sono due, è di 0 per quello che è stato definito prima e 1 per quello secondario.
Quando il puntatore torna uno solo, peraltro, viene riassunto il codice 0 dal puntatore che prima era secondario con codice 1.

Nessun commento:

Posta un commento