在 API 级别 28 中找不到 Canvas 变量
Posted
技术标签:
【中文标题】在 API 级别 28 中找不到 Canvas 变量【英文标题】:Can not find Canvas variables in API Level 28 【发布时间】:2019-06-06 11:44:27 【问题描述】:在 android 28 中找不到以下 Canvas
变量。
canvas.saveLayer(0, 0, getWidth(), getHeight(), null,
Canvas.MATRIX_SAVE_FLAG |
Canvas.CLIP_SAVE_FLAG |
Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
Canvas.CLIP_TO_LAYER_SAVE_FLAG);
【问题讨论】:
【参考方案1】:这些标志已在 API 28 中删除。请参阅 here:
类 android.graphics.Canvas
删除的方法 整数保存(整数)
删除的字段 int CLIP_SAVE_FLAG int CLIP_TO_LAYER_SAVE_FLAG int FULL_COLOR_LAYER_SAVE_FLAG int HAS_ALPHA_LAYER_SAVE_FLAG int MATRIX_SAVE_FLAG
API 26 中已弃用该方法。请参阅 here:
此方法在 API 级别 26 中已弃用。 请改用 saveLayer(float, float, float, float, Paint)。
改用什么
根据 API 28 的Canvas
源代码,您使用的所有标志组合起来等于ALL_SAVE_FLAG
的值:
public static final int ALL_SAVE_FLAG = 0x1F;
public static final int MATRIX_SAVE_FLAG = 0x01;
public static final int CLIP_SAVE_FLAG = 0x02;
public static final int HAS_ALPHA_LAYER_SAVE_FLAG = 0x04;
public static final int FULL_COLOR_LAYER_SAVE_FLAG = 0x08;
public static final int CLIP_TO_LAYER_SAVE_FLAG = 0x10;
从同一个source code 调用Canvas#saveLayer(left, top, right, bottom, paint)
默认使用ALL_SAVE_FLAG
:
/**
* Convenience for @link #saveLayer(RectF, Paint) that takes the four float coordinates of the
* bounds rectangle. */
public int saveLayer(float left, float top, float right, float bottom, @Nullable Paint paint)
return saveLayer(left, top, right, bottom, paint, ALL_SAVE_FLAG);
因此,您的代码看起来与以下代码等效,您可以将其用作替换:
canvas.saveLayer(0, 0, getWidth(), getHeight(), null);
此版本的 saveLayer() 仅适用于 API 21+。要支持较低的 API 级别,请使用
canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
其中Canvas.ALL_SAVE_FLAG
与上面的 or'ed 值相同。
【讨论】:
我不明白。应该使用什么来代替canvas.save(Canvas.MATRIX_SAVE_FLAG)
?是canvas.saveLayer(0,0,canvas.getWidth(),canvas.getHeight(),null);
吗?
@androiddeveloper 是的。我在答案中添加了指向引用源代码的链接。
@Cheticamp 哦,好的。谢谢。
@Cheticamp 我在上面使用,但我也得到:“调用需要 API 级别 21(当前最低为 19):android.graphics.Canvas#saveLayer”。如果我想支持 API 19 及以上版本应该怎么做?【参考方案2】:
您可以使用canvas.save();
代替canvas.save(Canvas.MATRIX_SAVE_FLAG|CLIP_SAVE_FLAG)
参考
【讨论】:
以上是关于在 API 级别 28 中找不到 Canvas 变量的主要内容,如果未能解决你的问题,请参考以下文章
在 Next.js 应用程序中找不到 API 路由(找不到该页面)
打字稿错误使用googlemaps javascript API时在ionic2中找不到名称'google'
在 i18n-iso-countries 中找不到“变音符号”错误?