Android рисует значок круга сверху на растровом изображении

Я хочу добавить значок с количеством ожидающих событий над значком меню приложения, но, как вы можете видеть на изображении ниже, у меня есть некоторые проблемы. Я не могу сделать круг непрозрачным, я не хочу видеть серые линии за кругом, а новое изображение обрезано сверху

Я хочу использовать его на значке логотипа на панели действий (значке дома), а не в каком-либо другом пункте меню на панели действий, поэтому просмотр настраиваемых действий невозможен.

введите здесь описание изображения

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId);
    bm = bm.copy(bm.getConfig(), true);

    Paint circlePaint = new Paint();
    circlePaint.setAntiAlias(true);
    circlePaint.setColor(Color.RED);
    circlePaint.setStyle(Paint.Style.FILL);
    //circlePaint.setAlpha(255);

    Paint textPaint = new Paint(); 
    textPaint.setStyle(Style.FILL);  
    textPaint.setColor(Color.WHITE); 
    textPaint.setTextSize(23); 
    textPaint.setFakeBoldText(true);

    Canvas canvas = new Canvas(bm);
    canvas.drawCircle(bm.getWidth()/6, bm.getHeight()/5, 13, circlePaint);
    canvas.drawText(text, bm.getWidth()/7 + 5, bm.getHeight()/3, textPaint);

    return new BitmapDrawable(context.getResources(), bm);

Любая помощь будет оценена!

Спасибо


person nirvik    schedule 29.10.2013    source источник
comment
Проверьте это stackoverflow.com/questions/13560526/   -  person Jitender Dev    schedule 29.10.2013


Ответы (3)


То, что вы ищете, называется Android View badger, и вам следует ознакомиться с этим прекрасным РУКОВОДСТВОМ или это... я уверен, что это вам очень поможет.. .наслаждаться :) :)

person Jeffy Lazar    schedule 29.10.2013
comment
Я хочу использовать его на значке логотипа панели действий (значок дома), а не в любом другом пункте меню панели действий. Я пытался использовать View badger, но ничего не показывает - person nirvik; 29.10.2013
comment
В приведенной выше ссылке указано, что элементы панели действий со значками в настоящее время не поддерживаются. Ему нужен значок на панели действий. - person Jitender Dev; 29.10.2013
comment
+1 за ссылку на учебник по ViewBadger (на самом деле репозиторий Git hub). Хорошая библиотека. - person Shaunti Fondrisi; 16.04.2014
comment
Ссылка на github не принимает контекст menuItem. - person Killer; 25.08.2015

Я думаю, что вы должны использовать относительный макет для этого, а не рисовать с холста.

Вот хорошее руководство как это сделать с относительным макетом< /сильный>.

РЕДАКТИРОВАТЬ:

Для ActionBar

person artemiygrn    schedule 29.10.2013
comment
Я не могу, потому что это значок на панели действий, и я принимаю только рисуемый - person nirvik; 29.10.2013
comment
хорошо, есть хороший ответ для панели действий пункт меню панели действий android actionbarsherlock"> stackoverflow.com/questions/13057782/ - person artemiygrn; 29.10.2013

Создайте пункт меню в res/menu и установите actionLayout на свой макет.

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/badge"
        android:actionLayout="@layout/actionbar_badge_layout"
        android:icon="@drawable/icn_menu_posts"
        android:showAsAction="always">
    </item>
</menu>

и ваш макет

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="48dp"
    android:layout_height="fill_parent"
    android:layout_gravity="right" >

    <!-- Menu Item Image -->
    <ImageView
        android:layout_width="48dp"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:src="@drawable/bkg_actionbar_notify_off" />

    <!-- Badge Count -->    
    <TextView
        android:id="@+id/actionbar_notifcation_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:padding="@dimen/padding_small"
        android:text="99"
        android:textColor="@color/holo_orange_dark" />

</RelativeLayout>

Затем в onCreateOptionsMenu вашей активности сделайте что-то вроде этого...

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.badge, menu);

    RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView();
    TextView tv = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview);
    tv.setText("12");
}

Также ознакомьтесь с этим ответом.

person Jitender Dev    schedule 29.10.2013
comment
Я забыл упомянуть, что это не обычный пункт меню внутри панели действий, я хочу добавить значок на значок дома. - person nirvik; 29.10.2013