API 28导致的Canvas FLAG失效

2019-04-17  本文已影响0人  suniney

原代码

 int flags = 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;
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, flags);

更改为

int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);

原因根据源码查看,在api28中已经全部改为:ALL_SAVE_FLAGS,其他已经无效:

/**
     * Restore everything when restore() is called (standard save flags).
     * <p class="note"><strong>Note:</strong> for performance reasons, it is
     * strongly recommended to pass this - the complete set of flags - to any
     * call to <code>saveLayer()</code> and <code>saveLayerAlpha()</code>
     * variants.
     *
     * <p class="note"><strong>Note:</strong> all methods that accept this flag
     * have flagless versions that are equivalent to passing this flag.
     */
    public static final int ALL_SAVE_FLAG = 0x1F;
 
    private static void checkValidSaveFlags(int saveFlags) {
        if (sCompatiblityVersion >= Build.VERSION_CODES.P
                && saveFlags != ALL_SAVE_FLAG) {
            throw new IllegalArgumentException(
                    "Invalid Layer Save Flag - only ALL_SAVE_FLAGS is allowed");
        }
上一篇下一篇

猜你喜欢

热点阅读