Tôi đã cố gắng tạo chế độ xem tùy chỉnh có hình dạng mờ bên dưới văn bản. Vấn đề là các BlurMaskFilter không có hiệu lực trên bất kỳ hình dạng mà tôi vẽ trên vải. Đây là cách tôi initialising các đối tượng Sơn trong constructor:Android BlurMaskFilter không có hiệu lực trong canvas.drawOval trong khi văn bản bị mờ
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));
Và tôi kêu gọi các chức năng như thế này trong OnDraw():
canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", x, y, paint);
Nhưng đây là những gì tôi nhìn thấy.
Sử dụng android 4.0 sdk và thử nghiệm trên một thiết bị Nexus 4.0.4 thiên hà (Anh). Tôi tự hỏi nếu đây là một lỗi trong 4.0.4 như tôi đã thử nghiệm nó trên giả lập với 4.0 và 4.0.3 và nó đã làm mờ hoàn toàn tốt trên chúng, trừ khi tôi đang làm một cái gì đó hoàn toàn sai?
EDIT: Đây là mã Chế độ xem mở rộng để kiểm tra trên các nền tảng khác.
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);
}
}
Tôi thấy điều tương tự trên Galaxy Nexus chạy 4.0.4, chỉ văn bản bị mờ, không có gì khác. Chạy cùng một ứng dụng thử nghiệm trên Gingerbread Incredible của tôi đúng cách làm mờ tất cả các hình dạng và văn bản. – Josh