美文网首页
API 28导致的Canvas FLAG失效

API 28导致的Canvas FLAG失效

作者: suniney | 来源:发表于2019-04-17 10:50 被阅读0次

    原代码

     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");
            }
    

    相关文章

      网友评论

          本文标题:API 28导致的Canvas FLAG失效

          本文链接:https://www.haomeiwen.com/subject/vcygwqtx.html