2016-02-04 3 views
6

Ich arbeite gerade an meinem Webbrowser Cornowser, der die Crosswalk-Engine verwendet, und ich stieß auf ein Problem. Ich möchte Farbmodi implementieren, wie sie in UltimateBrowserProject sind.Wie stelle ich einen Farbfilter für XWalkView ein?

Aber die Farbfilter gelten nicht. Ich habe versucht, den Layer-Typ und die Paint mit dem Farbfilter zu übergeben. Hier

ist der Quellcode:

// 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); 
} 

Ich versuchte es auch durch draw(canvas) zwingende, aber es ist das gleiche Ergebnis.

Kann jemand einen Farbfilter für XWalkView einstellen?

Vielen Dank im Voraus!

UPDATE:

Es scheint zu sein, dass SurfaceView nicht Farbfilter nicht unterstützt. Wie man es sowieso macht?

UPDATE 2: Es scheint, dass diese Frage nicht so viel Aufmerksamkeit bekommt ... ich meine Quellcode bearbeitet, wie es sollte funktionieren, aber es funktioniert nicht, überprüfen sie bitte, gibt logcat mir folgende Ausgabe :

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

Schluss Update: ich habe es tatsächlich mit JavaScript arbeiten. Wenn Sie wissen möchten, wie ich es gelöst habe, schauen Sie right here.

Antwort

0

Überschreiben Sie die draw (Canvas) Methode

schreiben die obige Quellcode

Am Ende der draw() Methodenaufruf invalidate()

+0

Ich verstehe nicht, warum Sie anrufen möchten annulliere am Ende von draw(). – xdevs23

Verwandte Themen