0

我有以下代码:

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

它从叠加层和底层中获取随机位图,并在其之间放置图标,但是当我调用此函数时,图层会随机丢失。fe 在第一次通话时我有底层和图标,在第二次覆盖和图标等我总是有图标,但只有一个层(底层或覆盖),从不使用它们中的机器人。

4

1 回答 1

0

代码是可行的,这是我的愚蠢错误……我只是在数组中放置了错误的可绘制对象。

于 2013-08-26T07:51:21.983 回答