Android开发:实现设备屏幕的灰白模式显示功能

更新:11-23 现代故事 我要投稿 纠错 投诉

大家好,如果您还对Android开发:实现设备屏幕的灰白模式显示功能不太了解,没有关系,今天就由本站为大家分享Android开发:实现设备屏幕的灰白模式显示功能的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

那么今天我们将介绍三种全局设置灰度模式的选项:

方案一:这也是我回复这小子的打算:将Activity的顶层View灰化,实现全局灰化的效果。我们来看看具体的实现过程。

可以在BaseActivity的onCreate方法中使用ColorMatrix设置灰度

@覆盖

protected void onCreate(@Nullable Bundle savingInstanceState) {

super.onCreate(savedInstanceState);

//选项1

油漆油漆=new Paint();

ColorMatrix cm=new ColorMatrix();

cm.setSaturation(0);//灰度效果

Paint.setColorFilter(new ColorMatrixColorFilter(cm));

getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE,paint);

}这是可以实现的。这种方法比较简单。

方案二:此方法使用自定义布局。在dispatchdraw方法中添加一层黑白位图,使界面以黑白模式打开。但缺点也很明显,应用比较滞后。

1.首先需要定义一个GrayFrameLayout布局

公共类GrayFrameLayout 扩展FrameLayout {

私有Paint mPaint=new Paint();

公共GrayFrameLayout(@NonNull上下文上下文){

超级(上下文);

}

公共GrayFrameLayout(@NonNull上下文上下文,@Nullable AttributeSet attrs){

超级(上下文,属性);

ColorMatrix cm=new ColorMatrix();

cm.setSaturation(0);

mPaint.setColorFilter(new ColorMatrixColorFilter(cm));

}

@覆盖

protected void onDraw(Canvas 画布) {

canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);

super.onDraw(画布);

}

@覆盖

受保护的无效dispatchDraw(画布画布){

canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);

super.dispatchDraw(画布);

}

}2.在BaseActivity的onCreateView方法中做如下处理

@覆盖

public View onCreateView(视图父级,字符串名称,上下文上下文,AttributeSet attrs){

//选项2

if("FrameLayout".equals(name)){

int attributeCount=attrs.getAttributeCount();

for (int i=0; i attributeCount; i++) {

String attributeName=attrs.getAttributeName(i);

字符串attributeValue=attrs.getAttributeValue(i);

if(attributeName.equals("id")){

int id=Integer.parseInt(attributeValue.substring(1));

String 资源名称=getResources().getResourceName(id);

if("android:id/content".equals(resourceName)){

GrayFrameLayout frameLayout=new GrayFrameLayout(this,attrs);

返回框架布局;

}

}

}

}

return super.onCreateView(parent, name, context, attrs);

}方案三一些特殊的控件需要置灰,比如webview、H5页面、视频等

1.创建灰显管理类

公共类GrayManager {

私有静态GrayManager mInstance;

私人绘画mGrayPaint;

私有ColorMatrix mGrayMatrix;

公共静态GrayManager getInstance() {

if (mInstance==null) {

同步(GrayManager.class){

if (mInstance==null) {

mInstance=new GrayManager();

}

}

}

返回mInstance;

}

//初始化

公共无效初始化(){

mGrayMatrix=new ColorMatrix();

mGrayPaint=new Paint();

mGrayMatrix.setSaturation(0);

mGrayPaint.setColorFilter(new ColorMatrixColorFilter(mGrayMatrix));

}

//硬件加速灰度方法

公共无效setLayerGrayType(查看视图){

if (mGrayMatrix==null || mGrayPaint==null) {

初始化();

}

view.setLayerType(View.LAYER_TYPE_HARDWARE, mGrayPaint);

}

}2.如果有特殊的控件需要变灰,直接调用setLayerGrayType()方法将view传入即可。比如demo中想要一个Activity变灰,那么在Activity中调用:

用户评论

非想

Android真机测试还是挺关键的,效果图看着不错,看能不能自己尝试一下。

    有20位网友表示赞同!

丢了爱情i

灰白模式确实比纯色更容易看清屏幕内容,不过感觉手机电池续航会受影响?

    有18位网友表示赞同!

〆mè村姑

我手机自带了灰白模式,用的还挺舒服的,方便调节亮度也能改善眼疲劳。

    有6位网友表示赞同!

今非昔比'

Android开发确实有很多小技巧,学习学习看能不能在自己的项目中用到。

    有14位网友表示赞同!

呆萌

对于视力不太好的朋友来说,灰白模式确实是一个很好的选择。

    有7位网友表示赞同!

眉黛如画

看代码感觉还是挺复杂的啊,我只会使用手机,不敢碰代码.

    有5位网友表示赞同!

冷风谷离殇

希望可以支持系统级灰白模式调整,那样就不用每个app都设置了。

    有18位网友表示赞同!

淡抹烟熏妆丶

这种细节的实现还挺有用的,对提升用户体验意义重大。

    有16位网友表示赞同!

残花为谁悲丶

感觉文章思路清晰,讲解得比较详细,可以让我更好地理解Android开发。

    有7位网友表示赞同!

万象皆为过客

现在很多手机都是支持这个功能的,看起来会更时尚也更酷炫一些。

    有16位网友表示赞同!

昂贵的背影

不知道灰白模式对硬件有什么影响?

    有16位网友表示赞同!

来自火星球的我

这个功能对于用户来说还是很实用的,能更好保护眼睛,提高阅读体验。

    有9位网友表示赞同!

龙卷风卷走爱情

文章里面提到的代码片段看起来可读性很好,方便理解和学习参考。

    有17位网友表示赞同!

铁树不曾开花

灰白模式会不会导致手机某些颜色显示不准确?

    有13位网友表示赞同!

弃我者亡

开发人员的厉害之处在于可以把抽象的想法转化为实际的功能,真是太牛了!

    有8位网友表示赞同!

£烟消云散

我想体验一下这款应用的灰白模式效果,感觉应该会很不一样。

    有17位网友表示赞同!

掉眼泪

这篇文章让我对Android开发有了更深的认识,原来还有这么多细节需要考虑。

    有19位网友表示赞同!

漫长の人生

学习到很多新知识,以后有机会自己尝试实现灰白模式功能!

    有18位网友表示赞同!

剑已封鞘

期待未来应用这个功能的App越来越多,能够更好地满足用户的需求。

    有7位网友表示赞同!

【Android开发:实现设备屏幕的灰白模式显示功能】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:高效移动硬盘数据恢复指南:恢复丢失文件的专业技巧 下一篇:轻松驾驭星际争霸II开源AI,仅需i5处理器与GTX1050显卡组合