当前位置: 首页 > 知识库问答 >
问题:

Android BlurMaskFilter在canvas.drawOval中没有效果,而文本模糊

章晋鹏
2023-03-14

我一直在尝试创建一个在文本下具有模糊形状的自定义视图。问题是BlurMaskFilter对我在画布上绘制的任何形状都没有影响。这是我如何在构造函数中初始化Paint对象:

paint = new Paint(0);
paint.setColor(0xffffffff);
paint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));

mShadowPaint = new Paint(0);
mShadowPaint.setColor(0xff333333);
mShadowPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));

我在onDraw()中调用这样的函数:

canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", x, y, paint);

但这就是我看到的。

使用android 4.0 sdk并在4.0.4 galaxy nexus设备(UK)上进行测试。我想知道这是否是4.0.4中的一个错误,因为我确实在4.0和4.0.3的模拟器上测试了它,并且它确实在它们上非常模糊,除非我做了完全错误的事情?

编辑:这是在其他平台上测试它的扩展视图代码。

import android.content.Context;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class BlurTestView extends View{

    private Paint paint;
    private Paint mShadowPaint;
    private int size = 100;
    private RectF mShadowBounds = new RectF();

    public BlurTestView(Context context) {
        this(context, null, 0);
    }

    public BlurTestView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public BlurTestView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        paint = new Paint(0);
        paint.setColor(0xff333333);
        paint.setTextSize(size);
        paint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));

        mShadowPaint = new Paint(0);
        mShadowPaint.setColor(0xff333333);
        mShadowPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));

        mShadowBounds.top = size;
        mShadowBounds.bottom = mShadowBounds.top+(size /2);
        mShadowBounds.left = 0;
        mShadowBounds.right = (int)paint.measureText("hello");
    }

    @Override
    public void onDraw(Canvas canvas)
    {
        canvas.drawOval(mShadowBounds,mShadowPaint);
        canvas.drawText("hello", 0, size, paint);
    }

}

共有3个答案

常雅珺
2023-03-14

在向路径添加过滤器时,我遇到了同样的问题。我注意到将目标设置为13或更低可以让过滤器工作。14岁以上的人没有。

android:targetSdkVersion="13" 
吴浩皛
2023-03-14

如果您不能在活动中禁用硬件加速(例如,它使用需要硬件加速的TextureView),您可以使用第一个参数LAYER_TYPE_SOFTWARE和第二个参数null调用setLayerType。

喜欢这个

public class BlurTestView extends View {

    public BlurTestView(Context context) {
        this(context, null, 0);
    }

    public BlurTestView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public BlurTestView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        // Disable hardware acceleration for this view
        setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

        // Perform other initialisation 
    }

    // Other methods and so on...
}

有关遮罩过滤器、效果和着色器的更多信息,请参见此处。

孔驰
2023-03-14

对我来说看起来像一个错误。我向Android团队报告了它;我们会看看他们怎么说。

如果您在< code>AndroidManifest.xml中的Activity上设置< code > Android:hardware accelerated = " false " ,它会正确呈现。

以下是Android图形团队的官方说法:“BlurMaskFilter不支持硬件加速。(截至2012年7月10日)

 类似资料:
  • CSS3 文本效果是这样一个术语用来在正常的文本中实现一些额外的特性。 主要是两个属性的 CSS3 文本效果,如下: text-shadow word-wrap 注意:Internet Explorer 10, Firefox,Chrome, Safari, 和 Opera支持text-shadow 属性。所有的主流浏览器支持自动换行(word-wrap)属性。Internet Explorer

  • 以下将与结合使用可完全删除 x 轴标签。我假设指定的中断在 ggplot 对象中并不真正存在,随后根本没有显示任何中断。 这是由< code>coord_sf()从EPSG 32717自动转换到EPSG 4326引起的吗?

  • 数字效果 数字效果生成不同格式的随机数或序数,例如小数、日期和时间码,甚至是当前日期和时间(在渲染时)。您可以使用数字效果来创建各种各样的计数器。序数的最大偏移是 30,000。 此效果适用于 8-bpc 颜色。 下列选项和值在“字体样式”对话框中提供:“字体”、“样式”、“方向”和“对齐方式”。要再次打开此对话框,请单击“效果控件”面板中效果项顶端的“选项”。 类型 记数法: 数字 十进制数。

  • #textshadow { text-shadow: 5px 5px 5px #FF0000; font-size:30px; } #wordwrap { width:11em; border:1px solid #000000; word-wrap:break-word; } #normal { width:11em; border:1px solid #000000; word-wrap:no

  • 除了使用CSS或javascript之外,有没有更本机的解决方案使用Phonegap来创建iOS7模糊效果? 我以前从未使用过Phonegap,我的应用程序需要模糊效果,我正在尝试使用我的网络技能创建此应用程序,或者雇佣本地开发人员。 谢谢大家!

  • 问题内容: 如果我 在控制台上,我将光标移到行首,最后是 我有 输入。 但是在Eclipse控制台上,我得到了 就像对待CR / LF一样。 我该如何设置? 问题答案: 正如Nishant在评论中指出的那样, 您在 这里 发现了一个错误 。 此错误最初是在2004年报告的 ( > 9年前!?!!),_并且似乎 没有 (或永远) 不会得到修复 。我已经在多个Eclipse版本(甚至是 _Eclips