我正在尝试设置温度以填充通知图标的整个方块。我已经尝试了各种设置和调整代码,这是我能得到的最好的。我首先在Android Assets Studio网站上创建了一些通知图标,并在相应的可绘制文件夹中将它们称为 ic_notification 。我创建的PNG是一个空白的PNG,其中3.4位于图中,如图所示,它是图片中的黑框。
我在桌面(10.1英寸大小)和三星Galaxy S之类的小手机上运行它,它的尺寸与下图相同。我想填满整个盒子而不仅仅是黑盒子,也可以覆盖浅蓝色的部分。有人可以解释为什么它不会填满整个屏幕,或者如何让它填满整个屏幕?
我使用的代码如下,部分[4] 是从数组中获取的温度,度是华氏度或摄氏度符号,具体取决于用户选择的内容在设置中。创建drawable后,在生成通知 .setLargeIcon(drawableToBitmap(iconDrawable))时,图标将被设置。
BitmapDrawable iconDrawable = writeOnDrawable(R.drawable.ic_notification, parts[4] + degrees);
public BitmapDrawable writeOnDrawable(int drawableId, String text) {
Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(),
drawableId).copy(Bitmap.Config.ARGB_8888, true);
Paint paint = new Paint();
paint.setStyle(Style.FILL);
paint.setColor(Color.WHITE);
paint.setTextSize(bm.getWidth() / 3);
paint.setTextAlign(Align.CENTER);
Canvas canvas = new Canvas(bm);
//Log.e("log_etag", "Drawable Text " + text);
//Log.e("log_etag", "getWidth bitMap " + bm.getWidth());
//Log.e("log_etag", "Text Width " + text.length());
Rect bounds = new Rect();
float x = bm.getHeight() / 2, y = bm.getWidth() / 2;
// get text lenght
paint.getTextBounds(text, 0, text.length(), bounds);
// canvas.drawLine(0, y, canvas.getWidth(), y, paint); // Included
// to show vertical alignment
// canvas.drawLine(x, 0, x, canvas.getHeight(), paint); // Included
// to show horizontal alignment
// draw text
canvas.drawText(text, x, y + bounds.height() * 0.5f, paint);
return new BitmapDrawable(mContext.getResources(), bm);
}
我使用以下内容转换为位图
public Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
答案 0 :(得分:0)
如果我没错,那么在将drawable转换为位图时会出现问题。对createBitmap的调用是将位图的大小定义为等于drawable的当前大小,但这不正确。如果drawable太小或太大,它将无法完全适合视图。
sdk中有一些特定的维度,它们确切地定义了通知位图图标应该有多大。所以试试这样:
int width = (int) getResources().getDimension(android.R.dimen.notification_large_icon_width);
int height = (int) getResources().getDimension(android.R.dimen.notification_large_icon_height);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);