input InputDispatcher :: findTouchedWindowTargetsLocked 查看

Cuando se envía el evento de entrada, se llamará

int32_t  InputDispatcher ::findTouchedWindowTargetsLocked

La escritura en este lugar es más complicada, luego de hacer clic, deslizar el dedo, puede revisar el registro y encontrar que este método será llamado continuamente.

Se eliminan algunos eventos de clic, que también se manejan aquí,

 

Cuando se hace clic, newGesture es verdadero

1204     bool newGesture = ( maskedAction == AMOTION_EVENT_ACTION_DOWN 
1205             || maskedAction == AMOTION_EVENT_ACTION_SCROLL 
1206             || isHoverAction );

Cuando se desliza y sube el dedo, newGesture es falso y newGesture afecta la lógica de procesamiento posterior

1237     if ( newGesture || ( isSplit && maskedAction == AMOTION_EVENT_ACTION_POINTER_DOWN )) {
 1238         / * Caso 1: Nuevo puntero divisible bajando, o necesita un objetivo para desplazarse o desplazarse. * /
1323     } else {
 1324         / * Caso 2: El puntero se mueve, sube, cancela o no se puede dividir hacia abajo. * /
 1325 
1326         // Si el puntero no está actualmente abajo, ignore el evento.
1327         if (! MTempTouchState . Down ) {
 1328 # if  DEBUG_FOCUS 
1329             ALOGD (" Eliminando el evento porque el puntero no está hacia abajo o porque previamente" 1330                     " eliminamos
 el evento de puntero hacia abajo.");
1331 # endif 
1332             injectionResult = INPUT_EVENT_INJECTION_FAILED ;
1333             goto  Falló ;
1334         }

Aquí mTempTouchState . Down afecta el flujo de procesamiento.

La lógica del código de mTempTouchState es confusa,

Puede agregar una vista de registro

mTempTouchState . Abajo proceso de cambio de valor.

En el multi-clic, los eventos de entrada cuando se inyectan, mTempTouchState . ¿ El valor hacia abajo es cómo cambiarlo?

 

1513     // Actualiza las piezas finales del estado táctil si el inyector tenía permiso.
1514     si ( injectionPermission == INJECTION_PERMISSION_GRANTED ) {
 1515         si (! WrongDevice ) {
 1516             si ( switchedDevice ) {
 1517 # Si  DEBUG_FOCUS 
1518                 ALOGD ( "acciones de puntero en conflicto:. Al cambiar a un dispositivo diferente");
1519 # endif 
1520                 * outConflictingPointerActions = true ;
1521             }
1522 
1523             if ( isHoverAction ) {
  
  
1538             } else  if ( maskedAction == AMOTION_EVENT_ACTION_UP 
1539                     || maskedAction == AMOTION_EVENT_ACTION_CANCEL ) {
 1540                 // Todos los indicadores hacia arriba o cancelados.
1541                 mTempTouchState . restablecer ();

Aquí puedes concentrarte en

El método de reinicio se establecerá en falso

4519 void  InputDispatcher :: TouchState ::reset () {
 4520     abajo = falso ;
4521     split = falso ;
4522     deviceId = -1;
4523     fuente = 0;
4524     displayId = -1;
4525     ventanas . claro ();
4526 }

 

Supongo que te gusta

Origin blog.csdn.net/aaajj/article/details/108692800
Recomendado
Clasificación