代码之家  ›  专栏  ›  技术社区  ›  m0narX

Android:每次调用函数时,结果可绘制的图层顺序都不同

  •  0
  • m0narX  · 技术社区  · 11 年前

    我有以下代码:

    public Drawable getMergedIcon(Drawable origIcon) {  
        Bitmap underlayBitmap = null, overlayBitmap = null;
        if (isSupportUnderlays()) {
            int overlayId = r.nextInt(Underlays.size());
            underlayBitmap = Underlays.get(overlayId);
            if(Overlays.size() == Underlays.size()) {
                overlayBitmap = Overlays.get(overlayId);
            }
            if(underlayBitmap == null) {
                return origIcon;
            }
    
            boolean needResize = false;
            int targetWidth, targetHeight;
            Bitmap iconBitmap = ((BitmapDrawable) origIcon).getBitmap();
    
            if(iconBitmap.getHeight() > underlayBitmap.getHeight()) {
                targetWidth = iconBitmap.getWidth();
                targetHeight = iconBitmap.getHeight();
                needResize = true;
            } else {
                targetWidth = underlayBitmap.getWidth();
                targetHeight = underlayBitmap.getHeight();
            }
    
    
            Paint paint = new Paint();
    
            Bitmap result = Bitmap.createBitmap(targetWidth, targetHeight, iconBitmap.getConfig());
            Canvas canvas = new Canvas(result);
    
            if(!needResize) {
                canvas.drawBitmap(underlayBitmap, 0, 0, paint);
            } else {
                canvas.drawBitmap(Bitmap.createScaledBitmap(underlayBitmap, targetWidth,targetHeight, false), 0, 0, paint);
            }
            int left = (targetHeight - (int) (targetHeight * iconScale)) / 2;
            int top = (targetWidth - (int) (targetWidth * iconScale)) / 2;
            iconBitmap = Bitmap.createScaledBitmap(iconBitmap, (int) (targetWidth * iconScale),(int) (targetHeight * iconScale), false);
            canvas.drawBitmap(iconBitmap, left, top, paint);
    
            if(overlayBitmap != null) {
                if(!needResize) {
                    canvas.drawBitmap(overlayBitmap, 0, 0, paint);
                } else {
                    canvas.drawBitmap(Bitmap.createScaledBitmap(overlayBitmap, targetWidth,targetHeight, false), 0, 0, paint);
                }
            }
            canvas.save();
    
            BitmapDrawable icon = new BitmapDrawable(mContext.getResources(), result);
            return icon; 
        }
        return origIcon;
    } 
    

    它从覆盖层和参考底图中获取随机位图,并将图标放置在位图之间 但是当我调用这个函数时,层被随机遗漏了。 例如,在第一次调用时,我有参考底图和图标,在第二次覆盖和图标等 我总是有图标,但只有一层(底层或覆盖层),从来没有机器人。

    1 回复  |  直到 11 年前
        1
  •  0
  •   m0narX    11 年前

    代码是可行的,这是我愚蠢的错误。。。 我只是在数组中放置了错误的drawings。