簡體   English   中英

如何在android中將BitmapDrawable轉換為LayerDrawable

[英]How to cast BitmapDrawable to LayerDrawable in android

這是代碼段。

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the main; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);

    MenuItem item = menu.findItem(R.id.action_notifications);
    LayerDrawable icon = (LayerDrawable) item.getIcon();




    // Update LayerDrawable's BadgeDrawable
    Utils2.setBadgeCount(this, icon, mNotificationsCount);
    return true;
}

這是錯誤的

LayerDrawable icon = (LayerDrawable) item.getIcon();

BitmapDrawable無法強制轉換為android.graphics.drawable.LayerDrawable

如何將BitmapDrawable轉換為圖層LayerDrawable?

編輯:添加setBadgeCount函數。

public static void setBadgeCount(Context context, LayerDrawable icon, int count) {

    BadgeDrawable badge;

    // Reuse drawable if possible
    Drawable reuse = icon.findDrawableByLayerId(R.id.ic_badge);
    if (reuse != null && reuse instanceof BadgeDrawable) {
        badge = (BadgeDrawable) reuse;
    } else {
        badge = new BadgeDrawable(context);
    }

    badge.setCount(count);
    icon.mutate();
    icon.setDrawableByLayerId(R.id.ic_badge, badge);
}

您只能投出Drawable你得到item.getIcon()LayerDrawable如果它實際上是一個LayerDrawable ,即如果icon菜單定義屬性引用一個定義的繪制layer-list

從你的文章mentionned:菜單定義( menu/menu_home.xml中的文章, menu/main.xml你的情況)

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_notifications"
        android:title="Notifications"
        android:icon="@drawable/ic_menu_notifications"
        android:showAsAction="always"/>
</menu>

引用的圖標( drawable/ic_menu_notifications )應該是layer-list

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item
      android:id="@+id/ic_notification"
      android:drawable="@drawable/ic_action_email"
      android:gravity="center" />
  <!-- set a place holder Drawable so android:drawable isn't null -->
  <item
      android:id="@+id/ic_badge"
      android:drawable="@drawable/ic_action_email" />
</layer-list>

另外一個層應該有ic_badge作為id。 這是setBadgeCount()使用的setBadgeCount()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM