AppWidget Bild mit abgerundeten Ecken

So erstelle ich dynamisch ein Bild in meiner App, indem ich verschiedene Ansichten animiere, die ich dem Benutzer im Hauptlayout meiner Anwendung zeige.

Zur Zeit erstelle ich meine Szene in einem RelativeLayout, nehme das Bild des Layouts als Bitmap und speichere die Bitmap auf SD, damit das Appwidget über uri darauf zugreifen kann.

Das funktioniert alles wunderbar, aber ... in dem Bestreben, abgerundete Ecken für das Appwidget-Bild zu erstellen, habe ich versucht, diese beiden Schnipsel zu verwenden, die ich gefunden habeHier

Mein Problem

ist, dass diese Methode eine Zeichenfunktion generiert (deren abgerundete Ecken perfekt aussehen, wenn sie als Zeichenfunktion angezeigt werden), aber ich muss diese transparenten Ecken als Bilddatei exportieren. Die drawToBitmap-Methode in CustomView unten generiert zwar ein Bitmap-Bild, aber die Ecken sind voll und quadratisch.

/**
 * shows a bitmap as if it had rounded corners. based on :
 * http://rahulswackyworld.blogspot.co.il/2013/04/android-drawables-with-rounded_7.html
 */
public class RoundedCornersDrawable extends BitmapDrawable {

    private final BitmapShader bitmapShader;
    private final Paint p;
    private final RectF rect;
    private final float borderRadius;

    public RoundedCornersDrawable(final Resources resources, final Bitmap bitmap, final float     borderRadius) {
        super(resources, bitmap);
        bitmapShader = new BitmapShader(getBitmap(), Shader.TileMode.CLAMP,     Shader.TileMode.CLAMP);
        final Bitmap b = getBitmap();
        p = getPaint();
        p.setAntiAlias(true);
        p.setShader(bitmapShader);
        final int w = b.getWidth(), h = b.getHeight();
        rect = new RectF(0, 0, w, h);
        this.borderRadius = borderRadius < 0 ? 0.15f * Math.min(w, h) : borderRadius;
    }

    @Override
    public void draw(final Canvas canvas) {
        canvas.drawRoundRect(rect, borderRadius, borderRadius, p);
    }
}

un

public class CustomView extends ImageView {
    private FrameLayout mMainContainer;
    private boolean mIsDirty=false;

    // TODO for each change of views/content, set mIsDirty to true and call invalidate

    @Override
    protected void onDraw(final Canvas canvas) {
        if (mIsDirty) {
            mIsDirty = false;
            drawContent();
            return;
        }
        super.onDraw(canvas);
    }

    /**
     * draws the view's content to a bitmap. code based on :
     * http://nadavfima.com/android-snippet-inflate-a-layout-draw-to-a-bitmap/
     */
    public static Bitmap drawToBitmap(final View viewToDrawFrom, final int width, final int height) {
        // Create a new bitmap and a new canvas using that bitmap
        final Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bmp);
        viewToDrawFrom.setDrawingCacheEnabled(true);
        // Supply measurements
        viewToDrawFrom.measure(MeasureSpec.makeMeasureSpec(canvas.getWidth(),     MeasureSpec.EXACTLY),
                MeasureSpec.makeMeasureSpec(canvas.getHeight(), MeasureSpec.EXACTLY));
        // Apply the measures so the layout would resize before drawing.
        viewToDrawFrom.layout(0, 0, viewToDrawFrom.getMeasuredWidth(),    viewToDrawFrom.getMeasuredHeight());
        // and now the bmp object will actually contain the requested layout
        canvas.drawBitmap(viewToDrawFrom.getDrawingCache(), 0, 0, new Paint());
        return bmp;
     }

    private void drawContent() {
        if (getMeasuredWidth() <= 0 || getMeasuredHeight() <= 0)
            return;
        final Bitmap bitmap = drawToBitmap(mMainContainer, getMeasuredWidth(), getMeasuredHeight());
        final RoundedCornersDrawable drawable = new RoundedCornersDrawable(getResources(),     bitmap, 15);
        setImageDrawable(drawable);
    }
}

Ich verstehe, dass eine Bitmap nicht die Alpha-Informationen enthält, die für transparente, abgerundete Ecken im Bild erforderlich sind. Also habe ich versucht, die Datei wie folgt als PNG zu speichern:

RCD_test ist ein RoundedCornersDrawable

Bitmap bitmap = RCD_test.getBitmap();
bitmap.setHasAlpha(true);
OutputStream stream = new          
FileOutputStream(Environment.getExternalStorageDirectory().getPath()+"/test/screenshottest.png");
bitmap.compress(CompressFormat.PNG, 100, stream);
stream.close();

aber ohne Erfolg. Dieser ganze Ansatz mag kompliziert erscheinen, aber ich habe mir dies ausgedacht, um die Einschränkungen von AppWidgets RemoteViews zu beseitigen.

Meine Frage

Wie kann ich RoundedCornersDrawable als PNG-Datei exportieren, die die schönen transparenten Ecken korrekt darstellt?

Vielen Dank im Voraus für die Hilfe, und ich bin offen für alle Vorschläge zu verschiedenen Herangehensweisen an das Problem als Ganzes!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage