26

テキストの下にぼやけた形状を持つカスタム ビューを作成しようとしています。問題は、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 デバイス (英国) でテストしています。これは 4.0 と 4.0.3 のエミュレーターでテストしたので、4.0.4 のバグなのだろうかと思っています。

編集: これは、他のプラットフォームでテストするための拡張ビュー コードです。

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);
    }

}
4

3 に答える 3

41

私にはバグのように見えます。Android チームに報告しました。彼らが何を言うか見てみましょう。

android:hardwareAccelerated="false"でアクティビティを設定すると、正しくレンダリングされますAndroidManifest.xml

Android グラフィックス チームからの公式の言葉は次のとおりです。「BlurMaskFilter はハードウェア アクセラレーションではサポートされていません。」(2012年7月10日現在)

于 2012-07-11T10:32:46.847 に答える
1

パスにフィルターを追加するときに同じ問題が発生しました。ターゲットを 13 以下に設定すると、フィルターが機能することに気付きました。14歳以上はしませんでした。

android:targetSdkVersion="13" 
于 2013-05-20T21:31:31.243 に答える