动态模糊

来自Flyme开放平台
跳转至: 导航搜索

SDK点击下载

1、初始化BlurDrawable环境.
2、为ActionBar添加动态模糊效果.
3、如何设置动态模糊等级?
4、如何设置动态模糊的Alpha值
5、为动态模糊添加颜色效果.
6、为自定义控件添加动态模糊效果.
7、对带毛玻璃的布局设置动画.
8、关于setForce方法.
9、混淆规则.

flyme-blur.aar是Meizu给第三方应用开发者提供的动态模糊特效开发包,第三方应用开发者可以通过使用flyme-blur.aar中提供给的接口来达到动态模糊效果,使其能完美适配Flyme 5.0 ,同时又能兼容android原生系统。 flyme-blur.aar中主要包含以下内容:

 为ActionBar添加动态模糊效果
 如何设置动态模糊等级
 如何设置动态模糊的Alpha值
 为动态模糊添加颜色效果
 为自定义控件添加动态模糊效果
 对带毛玻璃的布局设置动画

注意事项:对于flyme-blur.aar中提供的接口的有效性,Meizu保留修改或删除接口功能实现的权利。

一、BlurDrawable(动态模糊)

1、初始化BlurDrawable环境

1. 引入flyme-blur.aar库
2. 在应用继承Application类中的onCreate()里面加入

GLRenderManager.getInstance().initialize(this);

3. 在应用继承Application类中加入以下代码: @Override

 public void onTrimMemory(int level) {
super.onTrimMemory(level);
GLRenderManager.getInstance().trimMemory(level);
}

2、为ActionBar添加动态模糊效果

只需把BlurDrawable看作一个普通的自定义drawable,只需要设置一些参数便可以通过ActionBar#setBackgroundDrawable方法对ActionBar添加动态模糊,参考代码:

        ActionBar ab = getActionBar();
        int titleBarDividerHeight = 3;
        int titleBarHeight = 144;
        Rect layerInset = new Rect();
        layerInset.set(0, titleBarHeight - titleBarDividerHeight, 0, 0);
        ab.setBackgroundDrawable(createDrawable(0x80ededed, 0xffdd5847, 1.0f, layerInset));


    /**
    * 创建BlurDrawable,可以参考如何设置参数
    * @param background 毛玻璃颜色
    * @param divider 分隔线颜色
    * @param level 模糊等级
    * @param layerInset 分隔线区域
    * @return
    */
   private static Drawable createDrawable(int background, int divider, float level, Rect layerInset) {
       ColorDrawable dividerDrawable = new ColorDrawable(divider);
       BlurDrawable blurDrawable = new BlurDrawable();
       blurDrawable.setColorFilter(background);
       blurDrawable.setBlurLevel(level);
       blurDrawable.setForce(true);
       LayerDrawable ld = new LayerDrawable(new Drawable[]{blurDrawable, dividerDrawable});
       ld.setLayerInset(1, layerInset.left, layerInset.top, layerInset.right, layerInset.bottom);
       return ld;
     }


3、如何设置动态模糊等级

通过BlurDrawable.setBlurLevel( float level)可以用来设置模糊等级,level值在0.0f~1.0f之间,值越大,模糊等级越高,它的默认值 BlurDrawable.DEFAULT_BLUR_LEVEL=0.9f BlurDrawable.setBlurLevel(BlurDrawable.DEFAULT_BLUR_LEVEL);


4、如何设置动态模糊的Alpha值

通过BlurDrawable.setAlpha( int alpha)方法可以用来设置模糊效果在原有图像上叠加时采用的透明度,alpha值的范围在0~255之间。

5、为动态模糊添加颜色效果

通过BlurDrawable.setColorFilter(int color, PorterDuff.Mode mode) 可以在模糊效果基础上叠加颜色的效果,默认颜色效果是 PorterDuff.Mode.SRC_OVER(正常绘制显示,上下层绘制叠盖)。

6、为自定义控件添加动态模糊效果

新提供的BlurDrawable自身就带动态模糊,并不需要再像以前需要使用一个layout去刷新重绘。普通View设置毛玻璃背景只需要对View设置一个BlurDrawable就行

 BlurDrawable drawable = new BlurDrawable();
 drawable.setBlurLevel(0.9f);
 drawable.setColorFilter(0xC0000000);
 drawable.setForce(true);//请注意此方法,注意事项见第8点
 view.setBackground(drawable);

7、对带毛玻璃的布局设置动画

如果要对带毛玻璃的布局设置动画,那么此布局必须使用BlurFrameLayout、BlurLinearLayout、BlurRelativeLayout中的一个。如果使用了上述三种布局,那么BlurDrawable则不需要自己创建,只需要调用getBlurDrawable()获取对象即可。例如:

 BlurLinearLayout blurLinearLayout = (BlurLinearLayout)mRootView.findViewById(R.id.blurlinearlayout);
 GLBlurDrawable drawable = blurLinearLayout.getBlurDrawable();
 drawable.setBlurLevel(0.9f);
 drawable.setColorFilter(0xC0000000);
 drawable.setForce(true);//请注意此方法,注意事项见第8点
 //做动画,此处使用简单的aplha动画为例子
 AlphaAnimation alphaAnimation =new AlphaAnimation(0, 1);
 alphaAnimation.setDuration(300);
 drawable.setAlpha(0);//如果动画是从alpha 0 到 1的动画,GLblurDrawable的初始Alpha值一定要设置为0,否则动画   会出现异常
 blurLinearLayout.startAnimation(alphaAnimation);

8、关于setForce方法

这个方法,它会无视系统毛玻璃开关状态,在调试阶段打开没关系,在正式版本中就要按需处理了。比如之后正式版本对Actionbar设置毛玻璃效果的时候就不会调用这个方法。

9、混淆规则

 -keep class com.meizu.common.renderer.**{*;}
 -dontwarn com.meizu.common.renderer**

上述所有具体用法请参考samples示例。

导航菜单