2016-12-09 3 views
1

내 웹 페이지를로드하는 응용 프로그램에서 android WebView를 사용하고 있으며 사용자가 흰색으로 검은 색 & 흰색으로 WebView 내용을 볼 수 있도록 돕고 싶습니다. 나는 그것의 onDraw 방법에 웹보기에 컬러 필터를 적용 :Android WebView 캔버스에 BLACK & WHITE 컬러 필터 적용 해당 스크롤 속도 느려짐

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 속도가 느려지므로이를 최적화하는 방법을 제안합니다. 감사합니다.

답변

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인가 이상이다.