Android 4.0以上BlurMaskFilter效果无效

Android MaskFilter的基本使用:

MaskFilter类可以为Paint分配边缘效果。
        对MaskFilter的扩展可以对一个Paint边缘的alpha通道应用转换。Android包含了下面几种MaskFilter:

BlurMaskFilter   指定了一个模糊的样式和半径来处理Paint的边缘。
        EmbossMaskFilter  指定了光源的方向和环境光强度来添加浮雕效果。

要应用一个MaskFilter,可以使用setMaskFilter方法,并传递给它一个MaskFilter对象。下面的例子是对一个已经存在的Paint应用一个EmbossMaskFilter:

// 设置光源的方向
float[] direction = new float[]{ 1, 1, 1 };
//设置环境光亮度
float light = 0.4f;
// 选择要应用的反射等级
float specular = 6;
// 向mask应用一定级别的模糊
float blur = 3.5f;
EmbossMaskFilter emboss=new EmbossMaskFilter(direction,light,specular,blur);
// 应用mask myPaint.setMaskFilter(emboss);

SDK中包含的FingerPaint API demo是说明如何使用MaskFilter的一个非常好的例子。它展示了这两种filter的效果。

但是:

  在Manifest.xml的

  <uses-sdk
          android:minSdkVersion="8"
          android:targetSdkVersion="14" />

  targetSdkVersion设置为14或者以上的时候,BlurMaskFilter就不会起作用了!

图一 targetSdkVersion="8"                                                                              图二targetSdkVersion="14"

            

Demo代码:

package com.example.test;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BlurMaskFilter;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;

public class Canvas2Activity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(new CanvasView(this));
	}
	class CanvasView extends View{
		Paint paint = null;
		Rect rect1 = null;
		Rect rect2 = null;
		Path path2 = null;
		public CanvasView(Context context) {
			super(context);
			paint = new Paint();
			paint.setFlags(Paint.ANTI_ALIAS_FLAG);
			paint.setAntiAlias(true);
			paint.setColor(Color.RED);
			paint.setTextSize(20);
			paint.setStyle(Style.FILL_AND_STROKE);
			paint.setStrokeWidth(3);
			paint.setSubpixelText(true);

			BlurMaskFilter bmf = new BlurMaskFilter(50, Blur.SOLID);
			paint.setMaskFilter(bmf);
			rect2 = new Rect(300, 0, 500, 200);

			path2 = new Path();
			path2.moveTo(200, 200);
			path2.quadTo(200, 200, 300, 400);
			path2.lineTo(500, 500);
			path2.close();
		}
		@SuppressLint("DrawAllocation")
		@Override
		protected void onDraw(Canvas canvas) {
			// 绘制颜色
			canvas.drawARGB(0x7F, 0x33, 0x66, 0x99);
			canvas.drawRect(rect2, paint);
			canvas.drawPath(path2, paint);
			super.onDraw(canvas);
		}
	}
}

Android 4.0以上BlurMaskFilter效果无效

时间: 2024-10-13 03:54:42

Android 4.0以上BlurMaskFilter效果无效的相关文章

Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭【学习鸿洋_视频博客笔记总结】

学习鸿洋博客:http://blog.csdn.net/lmj623565791/article/details/39257409 学习鸿洋视频:慕课网视频 看看Android 高仿 QQ5.0 侧滑菜单效果 自定义控件实现效果: 技术上,继承HorizontalScrollView 加上自定义ViewGroup来实现: 1.onMeasure:决定内部View(子View)的宽和高,以及自己的宽和高 2.onLayout:决定子View的放置位置 3.onTouchEvent[监听动作] 自定

Android自定义组件系列【14】——Android5.0按钮波纹效果实现

今天任老师发表了一篇关于Android5.0中按钮按下的波纹效果实现<Android L中水波纹点击效果的实现>,出于好奇我下载了源代码看了一下效果,正好手边有一个Nexus手机,我结合实际效果看了一下,发现有一些地方和实际效果稍有不同,参考任老师的博文实现简单实现了一个重写View组件的代码,将全部代码贴出,如果有什么问题或者更好的方式请指出,在此再次感谢任老师的这篇博文. 转载请说明出处:http://blog.csdn.net/dawanganban 顺便在这里拉一下票,如果你觉得这篇文

Android 7.0 TextView点击事件无效修复方案

public class PostTextView extends TextView { private Handler handler = new Handler(Looper.getMainLooper()); public PostTextView(Context context) { super(context); } public PostTextView(Context context, AttributeSet attrs) { super(context, attrs); } p

Android 5.0 android:elevation 如果给button设置效果

看到android5.0版本中提供了  elevation  的功能,我在SDK Manager 下载了 Android 5.0  例子代码,看了下  ElevationBasic 例子,展示了2个view对象,一个圆形一个矩形,圆形设置了 android:elevation  =  30dp,具体例子如下 <?xml version="1.0" encoding="utf-8"?> <!-- Copyright 2014 The Android

android 5.0 Build.VERSION_CODES 无效

现在对android 5.0 api内部处理机制比较困惑.如果我的android app 使用 android 5.0版本进行编译,那么编译后的app是可以再android 5.0 和以后版本运行的.如果开发中配置(Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP) 依然能有效,如果运行在其他比较老的设备(android系统版本比较老),该设备没有给 Build.VERSION_CODES.LOLLIPOP 定义,如果才能以一种通用的方式运

从源码剖析PopupWindow 兼容Android 6.0以上版本点击外部不消失

PopupWindow可以说是Google坑最多的一个控件,使用PopupWindow的时候没有遇到几个坑你都不好意思说你用过它,说一个可能大多数人都遇到过的一个坑:那就是我们想触摸PopupWindow 以外区域就隐藏PopupWindow,理论上我们只需要调用 setOutsideTouchable(ture)设置为ture就可以了,但是实际上只设置这个属性是不行的,必须设置背景,也就是说要和setBackgroundDrawable(Drawable background)同时使用才有效,

[转]Android有趣的全透明效果--Activity及Dialog的全透明(附android系统自带图标大全

原文:http://blog.csdn.net/sodino/article/details/5822147 1.Activity全透明 同学zzm给了这个有趣的代码,现在公布出来. 先在res/values下建colors.xml文件,写入: <? xml   version = "1.0"   encoding = "UTF-8" ?>    < resources >        < color   name = "t

Android 6.0指纹识别App开发demo

在android 6.0中google终于给android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚啊.在google全新发布的nexus设备:nexus 5x和nexus 6p中都携带了一颗指纹识别芯片在设备的背面,如下图(图片来自网络): 笔者手中的设备就是图上的那台黑色的nexus 5x,话说这台机器很是好看呢!手感超棒! 废话不多说,下面我出一个指纹识别的demo app,并且详细说明怎么

android 6.0 系统获取权限

在Android 6.0 (API 23) 发布之前, 所有的权限都在安装应用的时候显示给用户,用户选择安装则表示全部接受这些权限, 之后无法撤销对这些权限的授权.但Android 6.0开始, 一部分比较危险的权限需要在程序运行时显式弹框,请求用户授权.所以,之前开发应用时,在manifest文件中配置对应的权限这种做法便达不到之前的效果.那么,现在要怎么做呢?提供两种思路,仅供参考: 1:判断android系统的版本,如果不是6.0及以上,按正常逻辑处理,如果是,则去打开系统弹框,请求系统权