我正在Android上编写一个画布应用程序,我正在寻找添加阴影,但是当我将它们添加到我的绘图对象时,我注意到了一个很慢的速度。我的代码很简单,看起来像这样:
...
Paint paint = new Paint();
paint.setShadowLayer(8.f, 0, 0, 0xff000000); // this line makes terribly slow drawing
canvas.drawRect(left, top, right, bottom, paint);
如何让它更快?
答案 0 :(得分:2)
使用此代码可以获得几乎相同的结果:
mPaint.setMaskFilter(new BlurMaskFilter(20, BlurMaskFilter.Blur.OUTER));
答案 1 :(得分:2)
在挖掘周围找到加速我的大文字阴影的方法时,我偶然发现了这个问题并回答:
setShadowLayer Android API differences
使用:
myView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
我大大加快了我应用中的所有文字阴影。
以下是我如何使用它的示例:
/**
* Set a backlight (shadow) on the passed TextView.
* @param textView
*/
void setBacklight(TextView textView) {
if (textView != null) {
float textSize = textView.getTextSize();
textView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
textView.setShadowLayer(textSize,0,0,getColor(R.color.color_backlight));
}
}
根据这份文件:
https://developer.android.com/guide/topics/graphics/hardware-accel.html
它表示您可以禁用视图的硬件加速。
我不知道为什么,但不知怎的,这神奇地加速了我的TextView阴影层。
我知道,我知道。 Canvas或Paint类不存在该方法。因此,为了回答具体问题(所以我不会被所有人抨击......),您可以在View上设置您打算绘制画布。像这样:
void inTheShadows(View view) {
float left = 0f;
float top = 0f;
float right = 10f;
float bottom = 10f;
Canvas canvas = new Canvas();
Paint paint = new Paint();
paint.setShadowLayer(8.f, 0, 0, 0xff000000);
canvas.drawRect(left, top, right, bottom, paint);
view.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
view.onDrawForeground(canvas);
}
答案 2 :(得分:1)
使用图像图标而不是绘制它:)
是阴影是昂贵的。