2016-09-15 3 views
1

Я пытаюсь установить растяжимый в большом значке уведомления,, но странное поведение происходит, то рисует становится меньше по какой-то причине, это первое уведомление на этом изображении:Уведомления большой значок смотрит маленький

enter image description here

Это вытяжка:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
<item> 
    <shape android:shape="rectangle" > 
     <solid android:color="@color/subject7"/> 
     <corners android:radius="30dp"/> 
     <padding 
      android:bottom="7dp" 
      android:left="7dp" 
      android:top="7dp" 
      android:right="7dp"/> 
    </shape> 
</item> 
<item android:drawable="@drawable/calendar_clock_colored_clicked" /> 

Это, как я устанавливаю largeIcon:

notification = new NotificationCompat.Builder(context); 
notification.setLargeIcon(drawableToBitmap(ResourcesCompat.getDrawable(context.getResources(), drawableID, null))); 

... 

public Bitmap drawableToBitmap (Drawable drawable) { 

    if (drawable instanceof BitmapDrawable) { 
     return ((BitmapDrawable)drawable).getBitmap(); 
    } 

    int width = drawable.getIntrinsicWidth(); 
    width = width > 0 ? width : 1; 
    int height = drawable.getIntrinsicHeight(); 
    height = height > 0 ? height : 1; 

    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    drawable.draw(canvas); 

    return bitmap; 
} 

Это случилось с кем угодно?

Редактировать: Это в BroadcastReceiver, вызывающее себя каждые 60 секунд, чтобы обновить уведомление, при первом появлении большого значка, оно появляется только после первого раза.

ответ

0

Если кто-то наткнулся на это.

Сделать растровое изображение с фактической PNG, с соответствующим дополнением в него, как это:

private Bitmap getBitmap(int color) { 
    Drawable drawable = ResourcesCompat.getDrawable(context.getResources(), R.drawable.notification_class_icon, null); 
    Canvas canvas = new Canvas(); 
    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
    canvas.setBitmap(bitmap); 

    //set round background on lolipop+ and square before 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     Paint p = new Paint(); 
     p.setAntiAlias(true); 
     p.setColor(ContextCompat.getColor(context, color)); 
     canvas.drawCircle(canvas.getHeight()/2, canvas.getHeight()/2, canvas.getHeight()/2, p); 
    } 
    else { 
     canvas.drawColor(ContextCompat.getColor(context, color)); 
    } 
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 
    drawable.draw(canvas); 

    return bitmap; 
} 

Это R.drawable.notification_class_icon выглядит:

enter image description here (черный является suposed к быть прозрачным).

Убедитесь, что вы сделали один для каждого измерения.

Затем просто установить на значок уведомления, как это и передать цвет для фона:

notification.setLargeIcon(getBitmap(R.color.colorPrimary)); 
Смежные вопросы