2016-02-04 26 views
6

Attualmente sto lavorando al mio browser web Cornowser, che utilizza il motore Crosswalk e ho riscontrato un problema. Voglio implementare le modalità colore, così come sono in UltimateBrowserProject.Come impostare un filtro colorato per XWalkView?

Ma i filtri di colore non si applicano. Ho provato a impostare il tipo di livello e passare il Paint con il filtro colore.

Ecco il codice sorgente:

// Handle color modes 

public void drawWithColorMode() { 
    Logging.logd("Applying web render color mode..."); 
    RenderColorMode.ColorMode cm = CornBrowser.getBrowserStorage().getColorMode(); 
    Paint paint = new Paint(); 
    final float[] negativeColor = { 
      -1.0f, 0, 0, 0, 255, // Red 
      0, -1.0f, 0, 0, 255, // Green 
      0, 0, -1.0f, 0, 255, // Blue 
      0, 0, 0, 1.0f, 0  // Alpha 
    }; 
    final float[] darkColor = { 
      1f, 0, 0, 0, -255, 
      0, 1f, 0, 0, -255, 
      0, 0, 1f, 0, -255, 
      0, 0, 0, 1f, 0 
    }; 
    final float[] invertColor = { 
      -1f, 0, 0, 0, 0, 
      0, -1f, 0, 0, 0, 
      0, 0, -1f, 0, 0, 
      0, 0, 0, 1f, 0 
    }; 

    Logging.logd("Found color mode: " + cm.mode); 

    switch(cm.mode) { 
     case RenderColorMode.ColorMode.NORMAL: 
      Logging.logd("Applying normal color mode"); 
      paint.setColorFilter(null); 
      break; 
     case RenderColorMode.ColorMode.DARK: 
      Logging.logd("Applying dark mode"); 
      paint.setColorFilter(new ColorMatrixColorFilter(darkColor)); 
      break; 
     case RenderColorMode.ColorMode.NEGATIVE: 
      Logging.logd("Applying negative mode"); 
      paint.setColorFilter(new ColorMatrixColorFilter(negativeColor)); 
      break; 
     case RenderColorMode.ColorMode.INVERT: 
      Logging.logd("Applying inverted mode"); 
      paint.setColorFilter(new ColorMatrixColorFilter(invertColor)); 
      break; 
     case RenderColorMode.ColorMode.GREYSCALE: 
      Logging.logd("Applying greyscale"); 
      ColorMatrix m = new ColorMatrix(); 
      m.setSaturation(0); 
      paint.setColorFilter(new ColorMatrixColorFilter(m)); 
      break; 
     default: 
      Logging.logd("Warning: Unknown color mode " + cm.mode + "."); 
      break; 
    } 

    Logging.logd("Setting layer type..."); 
    setLayerType(LAYER_TYPE_HARDWARE, paint); 
} 

Ho anche provato ridefinendo draw(canvas) ma è lo stesso risultato.

Qualcuno sa come impostare un filtro colore per XWalkView?

Grazie in anticipo!

UPDATE:

Sembra essere che SurfaceView non supporta filtri di colore. Come si fa comunque?

UPDATE 2: sembra che questa questione non è sempre così tanta attenzione ... ho modificato il mio codice sorgente, come dovrebbe funzionare, ma non funziona, prego la controlliamo, logcat mi dà seguente output :

D/Cornowser: Applying web render color mode... 
D/Cornowser: Found color mode: 2 
D/Cornowser: Applying negative mode 
D/Cornowser: Setting layer type... 

aggiornamento finale: realtà ho ottenuto che funziona utilizzando JavaScript. Se vuoi sapere come ho risolto, guarda right here.

risposta

0

Eseguire l'override del metodo draw

(Canvas) scrivere il codice sorgente di sopra

Al termine del sorteggio() chiamata al metodo invalidate()

+0

non capisco il motivo per cui si desidera chiamare invalido alla fine del sorteggio(). – xdevs23