默哀日,基本上大多網(wǎng)頁(yè)的黑白化扛施,只要一句話就搞定了,思路就是加一個(gè)灰色的濾鏡屹篓。公司app一個(gè)大紅色也是夠尬的疙渣,那我們Android端是不是也可以這樣子干呢,我找度娘打聽(tīng)了一下堆巧,大神們已給出了方案妄荔,我也就不用去摳腦袋了〉簦看看實(shí)現(xiàn)過(guò)程吧
方法一
在onCreate
中增加代碼
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
paint.setColorFilter(new ColorMatrixColorFilter(cm));
getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);
方法來(lái)源馬占柱
方法二
1.首先啦租,寫(xiě)一個(gè)黑白模式的FrameLayout布局
public class GrayFrameLayout extends FrameLayout {
private Paint mPaint = new Paint();
public GrayFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
}
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
super.dispatchDraw(canvas);
canvas.restore();
}
@Override
public void draw(Canvas canvas) {
canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
super.draw(canvas);
canvas.restore();
}
}
2.在你的BaseActivity中加上,替換android.id.content 對(duì)應(yīng)的 FrameLayout
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
try {
if ("FrameLayout".equals(name)) {
int count = attrs.getAttributeCount();
for (int i = 0; i < count; i++) {
String attributeName = attrs.getAttributeName(i);
String attributeValue = attrs.getAttributeValue(i);
if (attributeName.equals("id")) {
int id = Integer.parseInt(attributeValue.substring(1));
String idVal = getResources().getResourceName(id);
if ("android:id/content".equals(idVal)) {
GrayFrameLayout grayFrameLayout = new GrayFrameLayout(context, attrs);
return grayFrameLayout;
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return super.onCreateView(name, context, attrs);
}
3. 如果用了WebView谣沸,請(qǐng)加上webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
這句刷钢,不然位置會(huì)異常。
此方法更多細(xì)節(jié)請(qǐng)移步鴻洋的App 黑白化實(shí)現(xiàn)探索乳附,有一行代碼實(shí)現(xiàn)的方案嗎?