Buttons are 42dp wide, full-height album art with rounded corners

This commit is contained in:
tkashkin 2017-07-20 06:55:45 +03:00
commit 26bba697cb
5 changed files with 62 additions and 13 deletions

View file

@ -6,6 +6,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v7.graphics.Palette;
@ -177,11 +178,18 @@ public class AppWidgetCard extends BaseAppWidget {
appWidgetView.setImageViewBitmap(R.id.button_next, createBitmap(Util.getTintedVectorDrawable(service, R.drawable.ic_skip_next_white_24dp, color), 1f));
appWidgetView.setImageViewBitmap(R.id.button_prev, createBitmap(Util.getTintedVectorDrawable(service, R.drawable.ic_skip_previous_white_24dp, color), 1f));
Drawable image;
if (bitmap == null) {
appWidgetView.setImageViewResource(R.id.image, R.drawable.default_album_art);
image = appContext.getResources().getDrawable(R.drawable.default_album_art);
} else {
appWidgetView.setImageViewBitmap(R.id.image, bitmap);
image = new BitmapDrawable(bitmap);
}
float radius = appContext.getResources().getDimension(R.dimen.app_widget_card_radius);
int size = appContext.getResources().getDimensionPixelSize(R.dimen.app_widget_card_image_size);
appWidgetView.setImageViewBitmap(R.id.image, createRoundedBitmap(image, size, size, radius, 0, radius, 0));
pushUpdate(appContext, appWidgetIds, appWidgetView);
}
});

View file

@ -6,7 +6,11 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
/**
@ -22,6 +26,46 @@ public class BaseAppWidget extends AppWidgetProvider {
return bitmap;
}
protected static Bitmap createRoundedBitmap(Drawable drawable, int width, int height, float tl, float tr, float bl, float br) {
if (drawable == null) return null;
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);
drawable.draw(c);
Bitmap rounded = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(rounded);
Paint paint = new Paint();
paint.setShader(new BitmapShader(bitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
canvas.drawPath(composeRoundedRectPath(new RectF(0, 0, width, height), tl, tr, bl, br), paint);
return rounded;
}
protected static Path composeRoundedRectPath(RectF rect, float tl, float tr, float bl, float br) {
Path path = new Path();
tl = tl < 0 ? 0 : tl;
tr = tr < 0 ? 0 : tr;
bl = bl < 0 ? 0 : bl;
br = br < 0 ? 0 : br;
path.moveTo(rect.left + tl, rect.top);
path.lineTo(rect.right - tr, rect.top);
path.quadTo(rect.right, rect.top, rect.right, rect.top + tr);
path.lineTo(rect.right, rect.bottom - br);
path.quadTo(rect.right, rect.bottom, rect.right - br, rect.bottom);
path.lineTo(rect.left + bl, rect.bottom);
path.quadTo(rect.left, rect.bottom, rect.left, rect.bottom - bl);
path.lineTo(rect.left, rect.top + tl);
path.quadTo(rect.left, rect.top, rect.left + tl, rect.top);
path.close();
return path;
}
protected PendingIntent buildPendingIntent(Context context, final String action, final ComponentName serviceName) {
Intent intent = new Intent(action);
intent.setComponent(serviceName);