2016-12-09 5 views
1

自分のWebページを読み込むためにアンドロイドWebViewを使用していますが、ユーザーに白い色の黒色のWebViewコンテンツを表示するのを助けたいと考えています。 は、私はそのonDrawメソッド上のWebViewにカラーフィルタを適用:BLACK&WHITEカラーフィルターをAndroid WebViewキャンバスに適用するスクロール速度を遅くする

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の速度を遅くしています。それを最適化するための提案。 ありがとう

答えて

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

これは、はるかに効率的なビットマップを作成し、それonDraw()ColorMatrixColorFilterを適用するよりもです。

関連する問題