Example usage for android.graphics.drawable Drawable getIntrinsicWidth

List of usage examples for android.graphics.drawable Drawable getIntrinsicWidth

Introduction

In this page you can find the example usage for android.graphics.drawable Drawable getIntrinsicWidth.

Prototype

public int getIntrinsicWidth() 

Source Link

Document

Returns the drawable's intrinsic width.

Usage

From source file:com.nononsenseapps.feeder.model.ImageTextLoader.java

Drawable getImgDrawable(final Attributes attributes) {
    Drawable d = null;
    try {/*from  ww  w.j a v  a2  s  .co m*/
        // Source
        final String source = attributes.getValue("", "src");
        final String sWidth = attributes.getValue("", "width");
        final String sHeight = attributes.getValue("", "height");
        // Image size
        boolean shrunk = false;
        boolean hasSize = false;
        boolean hasPercentSize = false;
        int w = -1, h = -1;

        Log.d("JONAS", "Trying to get: " + source);

        // Calculate size first if possible
        if (sWidth != null && sWidth.contains("%") && sHeight != null && sHeight.contains("%")) {
            hasPercentSize = true;
        }
        if (sWidth != null && !sWidth.contains("%") && sHeight != null && !sHeight.contains("%")) {
            hasSize = true;
            Log.d("JONAS2", "Pixel size present");
            w = Integer.parseInt(sWidth);
            h = Integer.parseInt(sHeight);
            // This should be parsed away, but just in case...
            if (w < 10 || h < 10) {
                Log.d("JONAS4", "Bullshit image, ignoring...");
                lastImg = null;
                return null;
            }
            // Scale with screen density
            w = (int) (w * mDensityScale + 0.5f);
            h = (int) (h * mDensityScale + 0.5f);
            // Shrink if big (used for picasso downloading)
            // Don't resize if small, since it can be scaled
            // directly in drawable bounds. Need to shrink it to
            // save precious memory however.
            if (w > maxSize.x) {
                Log.d("JONAS2", "Its big, shrinking it");
                Point newSize = scaleImage(w, h);
                w = newSize.x;
                h = newSize.y;
                shrunk = true;
            }
        }

        final Bitmap b;
        if (shrunk || hasSize) {
            Log.d("JONAS2", "Resizing with library");
            b = g.load(source).asBitmap().fitCenter().into(w, h).get();
            //b = p.load(source).resize(w, h).tag(ImageTextLoader.this).get();
            //            } else if (hasSize) {
            //                Log.d("JONAS", "Image is small enough, getting directly");
            //                // No resize necessary since we know it is "small"
            //                //b = p.load(source).tag(ImageTextLoader.this).get();
        } else if (hasPercentSize) {
            Log.d("JONAS2", "Percentsize, " + "scaling for max");
            b = g.load(source).asBitmap().fitCenter().into(maxSize.x, maxSize.y).get();
        } else {
            Log.d("JONAS2", "no size info, " + "using intrinsic");
            b = g.load(source).asBitmap().fitCenter().into(maxSize.x, maxSize.y).get();
        }

        if (w == -1) {
            w = b.getWidth();
            h = b.getHeight();
            // Scale with screen density
            w = (int) (w * mDensityScale + 0.5f);
            h = (int) (h * mDensityScale + 0.5f);
        }
        // Enlarge if close, or shrink if big
        if (((float) w) / ((float) maxSize.x) > 0.5) {
            Log.d("JONAS2", "Scaling final image bounds");
            Point newSize = scaleImage(w, h);
            w = newSize.x;
            h = newSize.y;
        }

        d = new BitmapDrawable(appContext.getResources(), b);
        Log.d("JONAS", "Bounds: " + d.getIntrinsicWidth() + ", " + "" + d.getIntrinsicHeight() + " vs " + w
                + ", " + h);
        d.setBounds(0, 0, w, h);
    } catch (InterruptedException | ExecutionException e) {
        Log.e("JONAS", "" + e.getMessage());
    }
    return d;
}

From source file:com.android.launcher3.Workspace.java

private static Rect getDrawableBounds(Drawable d) {
    Rect bounds = new Rect();
    d.copyBounds(bounds);/*w  ww. j a v  a2  s  .  c  o m*/
    if (bounds.width() == 0 || bounds.height() == 0) {
        bounds.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    } else {
        bounds.offsetTo(0, 0);
    }
    if (d instanceof PreloadIconDrawable) {
        int inset = -((PreloadIconDrawable) d).getOutset();
        bounds.inset(inset, inset);
    }
    return bounds;
}

From source file:cc.flydev.launcher.Workspace.java

/**
 * Returns a new bitmap to show when the given View is being dragged around.
 * Responsibility for the bitmap is transferred to the caller.
 *//*from w  w w. j av  a  2  s. c  o m*/
public Bitmap createDragBitmap(View v, Canvas canvas, int padding) {
    Bitmap b;

    if (v instanceof TextView) {
        Drawable d = ((TextView) v).getCompoundDrawables()[1];
        b = Bitmap.createBitmap(d.getIntrinsicWidth() + padding, d.getIntrinsicHeight() + padding,
                Bitmap.Config.ARGB_8888);
    } else {
        b = Bitmap.createBitmap(v.getWidth() + padding, v.getHeight() + padding, Bitmap.Config.ARGB_8888);
    }

    canvas.setBitmap(b);
    drawDragView(v, canvas, padding, true);
    canvas.setBitmap(null);

    return b;
}

From source file:cc.flydev.launcher.Workspace.java

/**
 * Draw the View v into the given Canvas.
 *
 * @param v the view to draw//from   w ww .  ja va2 s.  com
 * @param destCanvas the canvas to draw on
 * @param padding the horizontal and vertical padding to use when drawing
 */
private void drawDragView(View v, Canvas destCanvas, int padding, boolean pruneToDrawable) {
    final Rect clipRect = mTempRect;
    v.getDrawingRect(clipRect);

    boolean textVisible = false;

    destCanvas.save();
    if (v instanceof TextView && pruneToDrawable) {
        Drawable d = ((TextView) v).getCompoundDrawables()[1];
        clipRect.set(0, 0, d.getIntrinsicWidth() + padding, d.getIntrinsicHeight() + padding);
        destCanvas.translate(padding / 2, padding / 2);
        d.draw(destCanvas);
    } else {
        if (v instanceof FolderIcon) {
            // For FolderIcons the text can bleed into the icon area, and so we need to
            // hide the text completely (which can't be achieved by clipping).
            if (((FolderIcon) v).getTextVisible()) {
                ((FolderIcon) v).setTextVisible(false);
                textVisible = true;
            }
        } else if (v instanceof BubbleTextView) {
            final BubbleTextView tv = (BubbleTextView) v;
            clipRect.bottom = tv.getExtendedPaddingTop() - (int) BubbleTextView.PADDING_V
                    + tv.getLayout().getLineTop(0);
        } else if (v instanceof TextView) {
            final TextView tv = (TextView) v;
            clipRect.bottom = tv.getExtendedPaddingTop() - tv.getCompoundDrawablePadding()
                    + tv.getLayout().getLineTop(0);
        }
        destCanvas.translate(-v.getScrollX() + padding / 2, -v.getScrollY() + padding / 2);
        destCanvas.clipRect(clipRect, Op.REPLACE);
        v.draw(destCanvas);

        // Restore text visibility of FolderIcon if necessary
        if (textVisible) {
            ((FolderIcon) v).setTextVisible(true);
        }
    }
    destCanvas.restore();
}

From source file:com.codemx.launcher3.CellLayout.java

@Override
protected void onDraw(Canvas canvas) {
    if (!mIsDragTarget) {
        return;/*from   ww w . j  a v  a  2s.  co m*/
    }

    // When we're large, we are either drawn in a "hover" state (ie when dragging an item to
    // a neighboring page) or with just a normal background (if backgroundAlpha > 0.0f)
    // When we're small, we are either drawn normally or in the "accepts drops" state (during
    // a drag). However, we also drag the mini hover background *over* one of those two
    // backgrounds
    if (mBackgroundAlpha > 0.0f) {
        mBackground.draw(canvas);
    }

    final Paint paint = mDragOutlinePaint;
    for (int i = 0; i < mDragOutlines.length; i++) {
        final float alpha = mDragOutlineAlphas[i];
        if (alpha > 0) {
            final Rect r = mDragOutlines[i];
            mTempRect.set(r);
            Utilities.scaleRectAboutCenter(mTempRect, getChildrenScale());
            final Bitmap b = (Bitmap) mDragOutlineAnims[i].getTag();
            paint.setAlpha((int) (alpha + .5f));
            canvas.drawBitmap(b, null, mTempRect, paint);
        }
    }

    if (DEBUG_VISUALIZE_OCCUPIED) {
        int[] pt = new int[2];
        ColorDrawable cd = new ColorDrawable(Color.RED);
        cd.setBounds(0, 0, mCellWidth, mCellHeight);
        for (int i = 0; i < mCountX; i++) {
            for (int j = 0; j < mCountY; j++) {
                if (mOccupied[i][j]) {
                    cellToPoint(i, j, pt);
                    canvas.save();
                    canvas.translate(pt[0], pt[1]);
                    cd.draw(canvas);
                    canvas.restore();
                }
            }
        }
    }

    int previewOffset = FolderIcon.FolderRingAnimator.sPreviewSize;

    // The folder outer / inner ring image(s)
    DeviceProfile grid = mLauncher.getDeviceProfile();
    for (int i = 0; i < mFolderOuterRings.size(); i++) {
        FolderIcon.FolderRingAnimator fra = mFolderOuterRings.get(i);

        Drawable d;
        int width, height;
        cellToPoint(fra.mCellX, fra.mCellY, mTempLocation);
        View child = getChildAt(fra.mCellX, fra.mCellY);

        if (child != null) {
            int centerX = mTempLocation[0] + mCellWidth / 2;
            int centerY = mTempLocation[1] + previewOffset / 2 + child.getPaddingTop()
                    + grid.folderBackgroundOffset;

            // Draw outer ring, if it exists
            if (FolderIcon.HAS_OUTER_RING) {
                d = FolderIcon.FolderRingAnimator.sSharedOuterRingDrawable;
                width = (int) (fra.getOuterRingSize() * getChildrenScale());
                height = width;
                canvas.save();
                canvas.translate(centerX - width / 2, centerY - height / 2);
                d.setBounds(0, 0, width, height);
                d.draw(canvas);
                canvas.restore();
            }

            // Draw inner ring
            d = FolderIcon.FolderRingAnimator.sSharedInnerRingDrawable;
            width = (int) (fra.getInnerRingSize() * getChildrenScale());
            height = width;
            canvas.save();
            canvas.translate(centerX - width / 2, centerY - width / 2);
            d.setBounds(0, 0, width, height);
            d.draw(canvas);
            canvas.restore();
        }
    }

    if (mFolderLeaveBehindCell[0] >= 0 && mFolderLeaveBehindCell[1] >= 0) {
        Drawable d = FolderIcon.sSharedFolderLeaveBehind;
        int width = d.getIntrinsicWidth();
        int height = d.getIntrinsicHeight();

        cellToPoint(mFolderLeaveBehindCell[0], mFolderLeaveBehindCell[1], mTempLocation);
        View child = getChildAt(mFolderLeaveBehindCell[0], mFolderLeaveBehindCell[1]);
        if (child != null) {
            int centerX = mTempLocation[0] + mCellWidth / 2;
            int centerY = mTempLocation[1] + previewOffset / 2 + child.getPaddingTop()
                    + grid.folderBackgroundOffset;

            canvas.save();
            canvas.translate(centerX - width / 2, centerY - width / 2);
            d.setBounds(0, 0, width, height);
            d.draw(canvas);
            canvas.restore();
        }
    }
}

From source file:com.android.launcher3.CellLayout.java

@Override
protected void onDraw(Canvas canvas) {
    if (!mIsDragTarget) {
        return;//  www  . ja  v  a 2 s .c  om
    }

    // When we're large, we are either drawn in a "hover" state (ie when dragging an item to
    // a neighboring page) or with just a normal background (if backgroundAlpha > 0.0f)
    // When we're small, we are either drawn normally or in the "accepts drops" state (during
    // a drag). However, we also drag the mini hover background *over* one of those two
    // backgrounds
    if (mBackgroundAlpha > 0.0f) {
        mBackground.draw(canvas);
    }

    final Paint paint = mDragOutlinePaint;
    for (int i = 0; i < mDragOutlines.length; i++) {
        final float alpha = mDragOutlineAlphas[i];
        if (alpha > 0) {
            final Rect r = mDragOutlines[i];
            mTempRect.set(r);
            Utilities.scaleRectAboutCenter(mTempRect, getChildrenScale());
            final Bitmap b = (Bitmap) mDragOutlineAnims[i].getTag();
            paint.setAlpha((int) (alpha + .5f));
            canvas.drawBitmap(b, null, mTempRect, paint);
        }
    }

    if (DEBUG_VISUALIZE_OCCUPIED) {
        int[] pt = new int[2];
        ColorDrawable cd = new ColorDrawable(Color.RED);
        cd.setBounds(0, 0, mCellWidth, mCellHeight);
        for (int i = 0; i < mCountX; i++) {
            for (int j = 0; j < mCountY; j++) {
                if (mOccupied[i][j]) {
                    cellToPoint(i, j, pt);
                    canvas.save();
                    canvas.translate(pt[0], pt[1]);
                    cd.draw(canvas);
                    canvas.restore();
                }
            }
        }
    }

    int previewOffset = FolderRingAnimator.sPreviewSize;

    // The folder outer / inner ring image(s)
    DeviceProfile grid = mLauncher.getDeviceProfile();
    for (int i = 0; i < mFolderOuterRings.size(); i++) {
        FolderRingAnimator fra = mFolderOuterRings.get(i);

        Drawable d;
        int width, height;
        cellToPoint(fra.mCellX, fra.mCellY, mTempLocation);
        View child = getChildAt(fra.mCellX, fra.mCellY);

        if (child != null) {
            int centerX = mTempLocation[0] + mCellWidth / 2;
            int centerY = mTempLocation[1] + previewOffset / 2 + child.getPaddingTop()
                    + grid.folderBackgroundOffset;

            // Draw outer ring, if it exists
            if (FolderIcon.HAS_OUTER_RING) {
                d = FolderRingAnimator.sSharedOuterRingDrawable;
                width = (int) (fra.getOuterRingSize() * getChildrenScale());
                height = width;
                canvas.save();
                canvas.translate(centerX - width / 2, centerY - height / 2);
                d.setBounds(0, 0, width, height);
                d.draw(canvas);
                canvas.restore();
            }

            // Draw inner ring
            d = FolderRingAnimator.sSharedInnerRingDrawable;
            width = (int) (fra.getInnerRingSize() * getChildrenScale());
            height = width;
            canvas.save();
            canvas.translate(centerX - width / 2, centerY - width / 2);
            d.setBounds(0, 0, width, height);
            d.draw(canvas);
            canvas.restore();
        }
    }

    if (mFolderLeaveBehindCell[0] >= 0 && mFolderLeaveBehindCell[1] >= 0) {
        Drawable d = FolderIcon.sSharedFolderLeaveBehind;
        int width = d.getIntrinsicWidth();
        int height = d.getIntrinsicHeight();

        cellToPoint(mFolderLeaveBehindCell[0], mFolderLeaveBehindCell[1], mTempLocation);
        View child = getChildAt(mFolderLeaveBehindCell[0], mFolderLeaveBehindCell[1]);
        if (child != null) {
            int centerX = mTempLocation[0] + mCellWidth / 2;
            int centerY = mTempLocation[1] + previewOffset / 2 + child.getPaddingTop()
                    + grid.folderBackgroundOffset;

            canvas.save();
            canvas.translate(centerX - width / 2, centerY - width / 2);
            d.setBounds(0, 0, width, height);
            d.draw(canvas);
            canvas.restore();
        }
    }
}

From source file:com.lite.android.launcher3.CellLayout.java

@Override
protected void onDraw(Canvas canvas) {
    if (!mIsDragTarget) {
        return;// ww  w.ja v  a 2  s  .co  m
    }

    // When we're large, we are either drawn in a "hover" state (ie when dragging an item to
    // a neighboring page) or with just a normal background (if backgroundAlpha > 0.0f)
    // When we're small, we are either drawn normally or in the "accepts drops" state (during
    // a drag). However, we also drag the mini hover background *over* one of those two
    // backgrounds
    if (mBackgroundAlpha > 0.0f) {
        mBackground.draw(canvas);
    }

    final Paint paint = mDragOutlinePaint;
    for (int i = 0; i < mDragOutlines.length; i++) {
        final float alpha = mDragOutlineAlphas[i];
        if (alpha > 0) {
            final Rect r = mDragOutlines[i];
            mTempRect.set(r);
            Utilities.scaleRectAboutCenter(mTempRect, getChildrenScale());
            final Bitmap b = (Bitmap) mDragOutlineAnims[i].getTag();
            paint.setAlpha((int) (alpha + .5f));
            canvas.drawBitmap(b, null, mTempRect, paint);
        }
    }

    if (DEBUG_VISUALIZE_OCCUPIED) {
        int[] pt = new int[2];
        ColorDrawable cd = new ColorDrawable(Color.RED);
        cd.setBounds(0, 0, mCellWidth, mCellHeight);
        for (int i = 0; i < mCountX; i++) {
            for (int j = 0; j < mCountY; j++) {
                if (mOccupied[i][j]) {
                    cellToPoint(i, j, pt);
                    canvas.save();
                    canvas.translate(pt[0], pt[1]);
                    cd.draw(canvas);
                    canvas.restore();
                }
            }
        }
    }

    int previewOffset = FolderRingAnimator.sPreviewSize;

    // The folder outer / inner ring image(s)
    DeviceProfile grid = mLauncher.getDeviceProfile();
    for (int i = 0; i < mFolderOuterRings.size(); i++) {
        FolderRingAnimator fra = mFolderOuterRings.get(i);

        Drawable d;
        int width, height;
        cellToPoint(fra.mCellX, fra.mCellY, mTempLocation);
        View child = getChildAt(fra.mCellX, fra.mCellY);

        if (child != null) {
            int centerX = mTempLocation[0] + mCellWidth / 2;
            int centerY = mTempLocation[1] + previewOffset / 2 + child.getPaddingTop()
                    + grid.folderBackgroundOffset;

            // Draw outer ring, if it exists
            if (FolderIcon.HAS_OUTER_RING) {
                d = FolderRingAnimator.sSharedOuterRingDrawable;
                width = (int) (fra.getOuterRingSize() * getChildrenScale());
                height = width;
                canvas.save();
                canvas.translate(centerX - width / 2, centerY - height / 2);
                d.setBounds(0, 0, width, height);
                d.draw(canvas);
                canvas.restore();
            }

            // Draw inner ring
            d = FolderRingAnimator.sSharedInnerRingDrawable;
            if (d != null) {
                width = (int) (fra.getInnerRingSize() * getChildrenScale());
                height = width;
                canvas.save();
                canvas.translate(centerX - width / 2, centerY - width / 2);
                d.setBounds(0, 0, width, height);
                d.draw(canvas);
                canvas.restore();
            }
        }
    }

    if (mFolderLeaveBehindCell[0] >= 0 && mFolderLeaveBehindCell[1] >= 0) {
        Drawable d = FolderIcon.sSharedFolderLeaveBehind;
        int width = d.getIntrinsicWidth();
        int height = d.getIntrinsicHeight();

        cellToPoint(mFolderLeaveBehindCell[0], mFolderLeaveBehindCell[1], mTempLocation);
        View child = getChildAt(mFolderLeaveBehindCell[0], mFolderLeaveBehindCell[1]);
        if (child != null) {
            int centerX = mTempLocation[0] + mCellWidth / 2;
            int centerY = mTempLocation[1] + previewOffset / 2 + child.getPaddingTop()
                    + grid.folderBackgroundOffset;

            canvas.save();
            canvas.translate(centerX - width / 2, centerY - width / 2);
            d.setBounds(0, 0, width, height);
            d.draw(canvas);
            canvas.restore();
        }
    }
}

From source file:com.aidy.launcher3.ui.workspace.Workspace.java

/**
 * Draw the View v into the given Canvas.
 * //w w w  . j a  v  a  2  s  . c  o m
 * @param v
 *            the view to draw
 * @param destCanvas
 *            the canvas to draw on
 * @param padding
 *            the horizontal and vertical padding to use when drawing
 */
private void drawDragView(View v, Canvas destCanvas, int padding, boolean pruneToDrawable) {
    final Rect clipRect = mTempRect;
    v.getDrawingRect(clipRect);

    boolean textVisible = false;

    destCanvas.save();
    if (v instanceof TextView && pruneToDrawable) {
        Drawable d = ((TextView) v).getCompoundDrawables()[1];
        clipRect.set(0, 0, d.getIntrinsicWidth() + padding, d.getIntrinsicHeight() + padding);
        destCanvas.translate(padding / 2, padding / 2);
        d.draw(destCanvas);
    } else {
        if (v instanceof FolderIcon) {
            // For FolderIcons the text can bleed into the icon area, and so
            // we need to
            // hide the text completely (which can't be achieved by
            // clipping).
            if (((FolderIcon) v).getTextVisible()) {
                ((FolderIcon) v).setTextVisible(false);
                textVisible = true;
            }
        } else if (v instanceof BubbleTextView) {
            final BubbleTextView tv = (BubbleTextView) v;
            clipRect.bottom = tv.getExtendedPaddingTop() - (int) BubbleTextView.PADDING_V
                    + tv.getLayout().getLineTop(0);
        } else if (v instanceof TextView) {
            final TextView tv = (TextView) v;
            clipRect.bottom = tv.getExtendedPaddingTop() - tv.getCompoundDrawablePadding()
                    + tv.getLayout().getLineTop(0);
        }
        destCanvas.translate(-v.getScrollX() + padding / 2, -v.getScrollY() + padding / 2);
        destCanvas.clipRect(clipRect, Op.REPLACE);
        v.draw(destCanvas);

        // Restore text visibility of FolderIcon if necessary
        if (textVisible) {
            ((FolderIcon) v).setTextVisible(true);
        }
    }
    destCanvas.restore();
}

From source file:g7.bluesky.launcher3.Launcher.java

public void loadIconPack(List<ShortcutInfo> shortcuts) {
    //theming vars-----------------------------------------------
    PackageManager pm = getPackageManager();
    final int ICONSIZE = Tools.numtodp(128, Launcher.this);
    Resources themeRes = null;/*from  w ww  .ja v  a2  s  .  c  o  m*/
    String resPacName = defaultSharedPref.getString(SettingConstants.ICON_THEME_PREF_KEY, "");
    String iconResource = null;
    int intres = 0;
    int intresiconback = 0;
    int intresiconfront = 0;
    int intresiconmask = 0;
    float scaleFactor = 1.0f;

    Paint p = new Paint(Paint.FILTER_BITMAP_FLAG);
    p.setAntiAlias(true);

    Paint origP = new Paint(Paint.FILTER_BITMAP_FLAG);
    origP.setAntiAlias(true);

    Paint maskp = new Paint(Paint.FILTER_BITMAP_FLAG);
    maskp.setAntiAlias(true);
    maskp.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));

    if (resPacName.compareTo("") != 0) {
        try {
            themeRes = pm.getResourcesForApplication(resPacName);
        } catch (Exception e) {
        }
        ;
        if (themeRes != null) {
            String[] backAndMaskAndFront = ThemeTools.getIconBackAndMaskResourceName(themeRes, resPacName);
            if (backAndMaskAndFront[0] != null)
                intresiconback = themeRes.getIdentifier(backAndMaskAndFront[0], "drawable", resPacName);
            if (backAndMaskAndFront[1] != null)
                intresiconmask = themeRes.getIdentifier(backAndMaskAndFront[1], "drawable", resPacName);
            if (backAndMaskAndFront[2] != null)
                intresiconfront = themeRes.getIdentifier(backAndMaskAndFront[2], "drawable", resPacName);
        }
    }

    BitmapFactory.Options uniformOptions = new BitmapFactory.Options();
    uniformOptions.inScaled = false;
    uniformOptions.inDither = false;
    uniformOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;

    Canvas origCanv;
    Canvas canvas;
    scaleFactor = ThemeTools.getScaleFactor(themeRes, resPacName);
    Bitmap back = null;
    Bitmap mask = null;
    Bitmap front = null;
    Bitmap scaledBitmap = null;
    Bitmap scaledOrig = null;
    Bitmap orig = null;

    if (resPacName.compareTo("") != 0 && themeRes != null) {
        try {
            if (intresiconback != 0)
                back = BitmapFactory.decodeResource(themeRes, intresiconback, uniformOptions);
        } catch (Exception e) {
        }
        try {
            if (intresiconmask != 0)
                mask = BitmapFactory.decodeResource(themeRes, intresiconmask, uniformOptions);
        } catch (Exception e) {
        }
        try {
            if (intresiconfront != 0)
                front = BitmapFactory.decodeResource(themeRes, intresiconfront, uniformOptions);
        } catch (Exception e) {
        }
    }
    //theming vars-----------------------------------------------
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = false;
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    options.inDither = true;

    for (int i = 0; i < shortcuts.size(); i++) {
        if (themeRes != null) {
            iconResource = null;
            intres = 0;
            iconResource = ThemeTools.getResourceName(themeRes, resPacName,
                    shortcuts.get(i).getTargetComponent().toString());
            if (iconResource != null) {
                intres = themeRes.getIdentifier(iconResource, "drawable", resPacName);
            }

            if (intres != 0) {//has single drawable for app
                shortcuts.get(i).setIcon(BitmapFactory.decodeResource(themeRes, intres, uniformOptions));
            } else {

                Drawable drawable = Utilities.createIconDrawable(shortcuts.get(i).getIcon(mIconCache));
                orig = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
                        Bitmap.Config.ARGB_8888);
                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
                drawable.draw(new Canvas(orig));

                scaledOrig = Bitmap.createBitmap(ICONSIZE, ICONSIZE, Bitmap.Config.ARGB_8888);
                scaledBitmap = Bitmap.createBitmap(ICONSIZE, ICONSIZE, Bitmap.Config.ARGB_8888);
                canvas = new Canvas(scaledBitmap);
                if (back != null) {
                    canvas.drawBitmap(back, Tools.getResizedMatrix(back, ICONSIZE, ICONSIZE), p);
                }

                origCanv = new Canvas(scaledOrig);
                orig = Tools.getResizedBitmap(orig, ((int) (ICONSIZE * scaleFactor)),
                        ((int) (ICONSIZE * scaleFactor)));
                origCanv.drawBitmap(orig,
                        scaledOrig.getWidth() - (orig.getWidth() / 2) - scaledOrig.getWidth() / 2,
                        scaledOrig.getWidth() - (orig.getWidth() / 2) - scaledOrig.getWidth() / 2, origP);

                if (mask != null) {
                    origCanv.drawBitmap(mask, Tools.getResizedMatrix(mask, ICONSIZE, ICONSIZE), maskp);
                }

                if (back != null) {
                    canvas.drawBitmap(Tools.getResizedBitmap(scaledOrig, ICONSIZE, ICONSIZE), 0, 0, p);
                } else
                    canvas.drawBitmap(Tools.getResizedBitmap(scaledOrig, ICONSIZE, ICONSIZE), 0, 0, p);

                if (front != null)
                    canvas.drawBitmap(front, Tools.getResizedMatrix(front, ICONSIZE, ICONSIZE), p);

                shortcuts.get(i).setIcon(scaledBitmap);
            }
        }
    }
}

From source file:g7.bluesky.launcher3.Launcher.java

public void loadIconPack() {
    //theming vars-----------------------------------------------
    PackageManager pm = getPackageManager();
    final int ICONSIZE = Tools.numtodp(64, Launcher.this);
    Resources themeRes = null;// w w w .j  a  v  a 2 s  .  c o  m
    String resPacName = defaultSharedPref.getString(SettingConstants.ICON_THEME_PREF_KEY, "");
    String iconResource = null;
    int intres = 0;
    int intresiconback = 0;
    int intresiconfront = 0;
    int intresiconmask = 0;
    float scaleFactor = 1.0f;

    Paint p = new Paint(Paint.FILTER_BITMAP_FLAG);
    p.setAntiAlias(true);

    Paint origP = new Paint(Paint.FILTER_BITMAP_FLAG);
    origP.setAntiAlias(true);

    Paint maskp = new Paint(Paint.FILTER_BITMAP_FLAG);
    maskp.setAntiAlias(true);
    maskp.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));

    if (resPacName.compareTo("") != 0) {
        try {
            themeRes = pm.getResourcesForApplication(resPacName);
        } catch (Exception e) {
        }
        ;
        if (themeRes != null) {
            String[] backAndMaskAndFront = ThemeTools.getIconBackAndMaskResourceName(themeRes, resPacName);
            if (backAndMaskAndFront[0] != null)
                intresiconback = themeRes.getIdentifier(backAndMaskAndFront[0], "drawable", resPacName);
            if (backAndMaskAndFront[1] != null)
                intresiconmask = themeRes.getIdentifier(backAndMaskAndFront[1], "drawable", resPacName);
            if (backAndMaskAndFront[2] != null)
                intresiconfront = themeRes.getIdentifier(backAndMaskAndFront[2], "drawable", resPacName);
        }
    }

    BitmapFactory.Options uniformOptions = new BitmapFactory.Options();
    uniformOptions.inScaled = false;
    uniformOptions.inDither = false;
    uniformOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;

    Canvas origCanv;
    Canvas canvas;
    scaleFactor = ThemeTools.getScaleFactor(themeRes, resPacName);
    Bitmap back = null;
    Bitmap mask = null;
    Bitmap front = null;
    Bitmap scaledBitmap = null;
    Bitmap scaledOrig = null;
    Bitmap orig = null;

    if (resPacName.compareTo("") != 0 && themeRes != null) {
        try {
            if (intresiconback != 0)
                back = BitmapFactory.decodeResource(themeRes, intresiconback, uniformOptions);
        } catch (Exception e) {
        }
        try {
            if (intresiconmask != 0)
                mask = BitmapFactory.decodeResource(themeRes, intresiconmask, uniformOptions);
        } catch (Exception e) {
        }
        try {
            if (intresiconfront != 0)
                front = BitmapFactory.decodeResource(themeRes, intresiconfront, uniformOptions);
        } catch (Exception e) {
        }
    }
    //theming vars-----------------------------------------------
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = false;
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    options.inDither = true;

    for (int i = 0; i < listApps.size(); i++) {
        if (themeRes != null) {
            iconResource = null;
            intres = 0;
            iconResource = ThemeTools.getResourceName(themeRes, resPacName,
                    listApps.get(i).getComponentName().toString());
            if (iconResource != null) {
                intres = themeRes.getIdentifier(iconResource, "drawable", resPacName);
            }

            if (intres != 0) {//has single drawable for app
                listApps.get(i).setIconBitmap(BitmapFactory.decodeResource(themeRes, intres, uniformOptions));
            } else {
                Drawable drawable = listApps.get(i).getIconDrawable();
                if (drawable == null) {
                    drawable = Utilities.createIconDrawable(listApps.get(i).getIconBitmap());
                }
                orig = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
                        Bitmap.Config.ARGB_8888);
                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
                drawable.draw(new Canvas(orig));

                scaledOrig = Bitmap.createBitmap(ICONSIZE, ICONSIZE, Bitmap.Config.ARGB_8888);
                scaledBitmap = Bitmap.createBitmap(ICONSIZE, ICONSIZE, Bitmap.Config.ARGB_8888);
                canvas = new Canvas(scaledBitmap);
                if (back != null) {
                    canvas.drawBitmap(back, Tools.getResizedMatrix(back, ICONSIZE, ICONSIZE), p);
                }

                origCanv = new Canvas(scaledOrig);
                orig = Tools.getResizedBitmap(orig, ((int) (ICONSIZE * scaleFactor)),
                        ((int) (ICONSIZE * scaleFactor)));
                origCanv.drawBitmap(orig,
                        scaledOrig.getWidth() - (orig.getWidth() / 2) - scaledOrig.getWidth() / 2,
                        scaledOrig.getWidth() - (orig.getWidth() / 2) - scaledOrig.getWidth() / 2, origP);

                if (mask != null) {
                    origCanv.drawBitmap(mask, Tools.getResizedMatrix(mask, ICONSIZE, ICONSIZE), maskp);
                }

                if (back != null) {
                    canvas.drawBitmap(Tools.getResizedBitmap(scaledOrig, ICONSIZE, ICONSIZE), 0, 0, p);
                } else
                    canvas.drawBitmap(Tools.getResizedBitmap(scaledOrig, ICONSIZE, ICONSIZE), 0, 0, p);

                if (front != null)
                    canvas.drawBitmap(front, Tools.getResizedMatrix(front, ICONSIZE, ICONSIZE), p);

                listApps.get(i).setIconBitmap(scaledBitmap);
            }
        }
    }
}