android在位图上绘制圆形徽章

时间:2013-10-29 09:04:32

标签: android canvas bitmap badge

我想在应用程序的菜单图标上方添加一个带有待处理事件数量的徽章,但正如您在下图中看到的那样,我遇到了一些问题。我无法让圆圈变得不透明,我不想看到圆圈后面的灰线和新图像被顶部切割

我想在操作栏的徽标图标(主页图标)上使用它,而不是在操作栏的任何其他菜单项中使用它,因此自定义操作视图不是一个选项

enter image description here

    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);

任何帮助将不胜感激!

由于

3 个答案:

答案 0 :(得分:2)

您所看到的内容名为Android View badger,您应该查看这个可爱的 TUTORIAL this ...我是确定它会帮助你很多...享受:) :))

答案 1 :(得分:0)

我认为你应该使用相对布局来代替画布。

这里nice tutorial如何处理相对布局

编辑:

ActionBar

答案 2 :(得分:0)

在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");
}

另请查看此answer