2016-12-09 6 views
1

Я использую android WebView в своем приложении для загрузки своих веб-страниц, и я хочу помочь своим пользователям просматривать содержимое WebView также в черном & белых цветах. я применил цветные фильтры WebView на его OnDraw метод:Применить цветные фильтры BLACK & WHITE для Android WebView canvas Замедление его скорости прокрутки

public class WebViewInverterDummy extends WebView { 


private Paint paint; 
private ColorFilter cf; 
private Rect inversionRect; 
private Canvas cc; 


private int NORMAL_MODE = 0; 
private int BLACK_WHITE_MODE = 1; 
public int WEB_VIEW_MODE = 0; 
private int LAST_SELECTED_MODE = 0; 


// private Bitmap bitmap; 

private ColorMatrix normalViewMatrix; 
private ColorMatrix blackViewMatrix; 

public WebViewInverterDummy(Context context) { 
    super(context); 
    intiFields(); 
    init(); 
    paint = new Paint(); 
    intBlackViewMatrix(); 
} 
private void intiFields() { 
    inversionRect = new Rect(); 
    cc = new Canvas(); 
} 


@Override 
protected void onDraw(Canvas c) { 

    if (WEB_VIEW_MODE == NORMAL_MODE) { 
     super.onDraw(c); 
    } else { 
     if (bitmap == null) { 
      bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
      cc = new Canvas(bitmap); 
     } 
     super.onDraw(cc); 
     init(); 
     c.drawColor(Color.WHITE); 
     c.drawBitmap(bitmap, 0, 0, paint); 
    } 
} 

private void init() { 

    if (cf == null || WEB_VIEW_MODE != LAST_SELECTED_MODE) { 
     if (WEB_VIEW_MODE == BLACK_WHITE_MODE) { 
      if (blackViewMatrix == null) 
       intBlackViewMatrix(); 
      cf = new ColorMatrixColorFilter(blackViewMatrix); 
     } 
    } 
} 


public void setWEB_VIEW_MODE(int mode) { 
    LAST_SELECTED_MODE = WEB_VIEW_MODE; 
    WEB_VIEW_MODE = mode; 
} 

public int getWebViewMode() { 
    return WEB_VIEW_MODE; 
} 


private ColorMatrix intBlackViewMatrix() { 
    // Black & white Mode 
    float[] mx = new float[]{ 
      -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 
    }; 

    blackViewMatrix = new ColorMatrix(mx); 
    blackViewMatrix.setSaturation(0); 
    return blackViewMatrix; 
} 

} 

я успешно применять черный & белый цвет на WebView, но проблема в том, что он замедляет скорость прокрутки в WebView. Как я могу оптимизировать его и есть ли способ прямого применения цветовых фильтров поверх холста, потому что рисование растрового изображения поверх холста замедляет WebView speed.any предложение оптимизировать его. Спасибо

ответ

0

Вы можете применить свой ColorMatrixColorFilter непосредственно к WebView в своем основном действии.

// Initialize `paint`. 
Paint paint = new Paint(); 

// Setup the float array. 
float[] mx = { 
    -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 
}; 

// Set `paint` to use `mx` as the `ColorMatrixColorFilter`. 
paint.setColorFilter(new ColorMatrixColorFilter(mx)); 

// Apply `paint` to `webView`. 
webView.setLayerType(View.LAYER_TYPE_HARDWARE, paint); 

Это гораздо более эффективным, чем создание растрового изображения и применяя к нему ColorMatrixColorFilteronDraw().