Android实现设置APP灰白模式效果

目录
  • 方案一:
  • 方案二:
  • 方案三

细心点的童鞋会发现,到特殊节日比如清明节这天很多App都设置了符合主题的灰白模式,比如京东,如图所示:

我们再来看看最终实现的效果图:

那我们今天就介绍三种方案全局设置灰白模式:

方案一:

这也是我回复这位童鞋的方案:给Activity的顶层View设置置灰,实现全局置灰效果,下面我们来看看具体的实现过程。

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

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //方案一
        Paint paint = new Paint();
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(0);//灰度效果
        paint.setColorFilter(new ColorMatrixColorFilter(cm));
        getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE,paint);
    }

这样就可以实现啦,这种方式还是比较简单的。

方案二:

该方法使用自定义layout,在dispatchdraw方法的时候,添加一层黑白色的bitmap,让界面开起来成为黑白模式。但是缺点明显,应用比较卡顿。

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

public class GrayFrameLayout extends FrameLayout {
    private Paint mPaint = new Paint();

    public GrayFrameLayout(@NonNull Context context) {
        super(context);
    }

    public GrayFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(0);
        mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
        super.onDraw(canvas);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
        super.dispatchDraw(canvas);
    }
}

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

 	@Override
    public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {

        //方案二
        if("FrameLayout".equals(name)){
            int attributeCount = attrs.getAttributeCount();
            for (int i = 0; i < attributeCount; i++) {
                String attributeName = attrs.getAttributeName(i);
                String attributeValue = attrs.getAttributeValue(i);
                if(attributeName.equals("id")){
                    int id = Integer.parseInt(attributeValue.substring(1));
                    String resourceName = getResources().getResourceName(id);
                    if("android:id/content".equals(resourceName)){
                        GrayFrameLayout frameLayout  = new GrayFrameLayout(this,attrs);
                        return frameLayout;
                    }
                }
            }
        }

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

方案三

有些特殊控件需要置灰,比如webview、H5页面、视频等

1、创建一个置灰的管理类

public class GrayManager {

    private static GrayManager mInstance;
    private Paint mGrayPaint;
    private ColorMatrix mGrayMatrix;

    public static GrayManager getInstance() {
        if (mInstance == null) {
            synchronized (GrayManager.class) {
                if (mInstance == null) {
                    mInstance = new GrayManager();
                }
            }
        }
        return mInstance;
    }

    //初始化
    public void init() {
        mGrayMatrix = new ColorMatrix();
        mGrayPaint = new Paint();
        mGrayMatrix.setSaturation(0);
        mGrayPaint.setColorFilter(new ColorMatrixColorFilter(mGrayMatrix));
    }

    //硬件加速置灰方法
    public void setLayerGrayType(View view) {
        if (mGrayMatrix == null || mGrayPaint == null) {
            init();
        }

        view.setLayerType(View.LAYER_TYPE_HARDWARE, mGrayPaint);
    }
}

2、特殊控件需要置灰的话直接调用setLayerGrayType()方法将view传进去,比如demo中让某个Activity置灰,那就在Activity里面调用:

GrayManager.getInstance().setLayerGrayType(getWindow().getDecorView());

以上三种方案都可以实现灰白模式,也是经过demo测试验证的,不过可能由于测试范围比较狭隘,所以可能还有其它情况,那就后面遇到再补充吧,今天的内容就到这里啦。

到此这篇关于Android实现设置APP灰白模式效果的文章就介绍到这了,更多相关Android APP灰白模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android实现设置APP灰白模式效果

    目录 方案一: 方案二: 方案三 细心点的童鞋会发现,到特殊节日比如清明节这天很多App都设置了符合主题的灰白模式,比如京东,如图所示: 我们再来看看最终实现的效果图: 那我们今天就介绍三种方案全局设置灰白模式: 方案一: 这也是我回复这位童鞋的方案:给Activity的顶层View设置置灰,实现全局置灰效果,下面我们来看看具体的实现过程. 可以在BaseActivity的onCreate方法中,使用ColorMatrix设置灰度 @Override protected void onCreat

  • android动态设置app当前运行语言的方法

    android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言. package com.example.androidtest; import java.util.Locale; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.content.res.Configuration; import android.conte

  • Android开发设置RadioButton点击效果的方法

    本文实例讲述了Android开发设置RadioButton点击效果的方法.分享给大家供大家参考,具体如下: 在安卓开发中用到底部菜单栏 需要用到RadioButton这个组件 实际应用的过程中,需要对按钮进行点击,为了让用户知道是否点击可这个按钮,可以设置点击后 ,该按钮的颜色或者背景发生变化. layout中这部分的代码为: <RadioButton android:id="@+id/radio_button0" android:layout_height="fill

  • Android实现京东App分类页面效果

    今天群里有人问了关于仿京东App分类页面的实现,而我之前正好查过这方面的资料,手上正好有一个demo,正好分享给大家看看,个人觉得效果棒棒哒! 首先来看效果图吧 是不是很6呢,来分析这个demo的主体构成吧,顶部为搜索栏,左侧是scroview,不要担心优化问题,因为scroview里面的TextView是动态生成的,完全不用担心优化问题,右侧是viewPager,Scroview可以控制viewPager的滑动,反之ViewPager也可以控制scroview的滑动. 闲话少说,直接上代码:

  • Android 使用CoordinatorLayout实现滚动标题栏效果的实例

    在Material Design里,CoordinatorLayout通常用来作为顶层视图,来协调处理各个子View之间的动作,从而实现各种动画效果,如Snackbar与FloatingActionButton的配合显示效果,就是以CoordinatorLayout作为根布局来实现的 CoordinatorLayout提供Behaviors接口,子View通过实现Behaviors接口来协调和其它View之间的显示效果,可以这么理解: CoordinatorLayout让其子View之间互相知道

  • 详解Android更改APP语言模式的实现过程

    一.效果图 二.描述 更改Android项目中的语言,这个作用于只用于此APP,不会作用于整个系统 三.解决方案 (一)布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" a

  • Android 代码设置开机自启动App的方法

    有的时候想要用户一旦打开手机.我们的APP就自动运行了. 代码如下: 创建一个监听. /** * create by:sunlei on 2017/7/7 15:48 * e-mail:872822645@qq.com * introduce: */ public class ContentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { I

  • Android中设置组件半透明和透明的效果示例

    本文介绍了Android是如何设置组件半透明和透明的效果,分享出来供大家参考,下面来看看详细的介绍: 1.Button或者ImageButton的背景设为透明或者半透明 半透明 <Button android:background="#e0000000" ... /> 透明 <Button android:background="#00000000" ... /> 颜色和不透明度 (alpha) 值以十六进制表示法表示.任何一种颜色的值范围都

  • Android编程实现RotateAnimation设置中心点旋转动画效果

    本文实例讲述了Android编程实现RotateAnimation设置中心点旋转动画效果.分享给大家供大家参考,具体如下: 在xml设置: <?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="800" // 设置动画

  • Android仿斗鱼直播的弹幕效果

    记得之前有位朋友在我的公众号里问过我,像直播的那种弹幕功能该如何实现?如今直播行业确实是非常火爆啊,大大小小的公司都要涉足一下直播的领域,用斗鱼的话来讲,现在就是千播之战.而弹幕则无疑是直播功能当中最为重要的一个功能之一,那么今天,我就带着大家一起来实现一个简单的Android端弹幕效果. 分析 首先我们来看一下斗鱼上的弹幕效果,如下图所示: 这是一个Dota2游戏直播的界面,我们可以看到,在游戏界面的上方有很多的弹幕,看直播的观众们就是在这里进行讨论的. 那么这样的一个界面该如何实现呢?其实并

随机推荐