fas*_*ana 24 android blur android-canvas android-4.0-ice-cream-sandwich
我一直在尝试创建一个在文本下模糊形状的自定义视图.问题是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));
Run Code Online (Sandbox Code Playgroud)
我在onDraw()中调用这样的函数:
canvas.drawOval(mShadowBounds,mShadowPaint);
canvas.drawText("hello", x, y, paint);
Run Code Online (Sandbox Code Playgroud)
但这就是我所看到的.

使用android 4.0 sdk并在4.0.4 galaxy nexus设备(英国)上进行测试.我想知道这是不是4.0.4中的一个错误,因为我在4.0和4.0.3模拟器上测试它并且它确实很好地模糊了它们,除非我做错了什么?
编辑:这是在其他平台上测试它的扩展View代码.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
Spa*_*rky 37
对我来说看起来像个错误.我向Android团队报告过; 我们会看到他们说的话.
如果您android:hardwareAccelerated="false"在"活动"中设置,则会正确呈现AndroidManifest.xml.
以下是Android图形团队的官方消息:"硬件加速不支持BlurMaskFilter." (截至2012年7月10日)
如果您无法在您的活动中禁用硬件加速(例如,它使用需要硬件加速的 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...
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到有关遮罩过滤器、效果和着色器的更多信息。
| 归档时间: |
|
| 查看次数: |
19594 次 |
| 最近记录: |