如何在Android中将Drawable转换为int,反之亦然

时间:2015-12-27 14:42:10

标签: android drawable android-sharedpreferences

我想将 Drawable 转换为 int 然后反之亦然。基本上我想将 Arraylist 对象保存到 sharedPrefrence 。为此,我将 Gson 实施为Srtring转换方法。如果我在这里使用 Drawable 而不是 int ,那么Gson String转换需要很多时间。所以我想使用int而不是Drawable。

 private List<AppInfo> apps = null;

   public void setIcon(int icon) {
    this.icon = icon;
}

   apps.get(position).setIcon(mContext.getResources().getDrawable(apps.get(position).getIcon()));

这里的AppInfo是

    public AppInfo(String appname, String pname, String versionName, int versionCode, int icon, int color) {
    this.appname = appname;
    this.pname = pname;
    this.versionName = versionName;
    this.versionCode = versionCode;
    this.icon = icon;
    this.color = color;
}

以下是将Custom对象的ArrayList转换为String的源代码,以便我可以将其保存到SharedPrefrence。

            Gson gson = new Gson();
            apps.get(number).setColor(picker.getColor());
            String JsonAppsdata = gson.toJson(apps);
            System.out.println("Storing="+JsonAppsdata);
            utility.StoreData(getApplicationContext(), JsonAppsdata);

3 个答案:

答案 0 :(得分:4)

Int - &gt;绘制对象:

Drawable icon = getResources().getDrawable(42, getTheme());

可绘制 - &gt; INT:

(我认为,您正在使用其图标已位于您应用的List<AppInfo> apps文件夹中的应用来填充res/drawable

R.drawable.app1设置为ImageView后,您还可以在tag之后为ImageView指定资源:

    ImageView appIcon1ImageView = (ImageView)findViewById(R.id.app_icon_1);
    appIcon1ImageView.setImageDrawable(getDrawable(R.drawable.app1));
    appIcon1ImageView.setTag(R.drawable.app1);

    ......
    // Once you need to identify which resource is in ImageView
    int drawableId = Integer.parseInt(appIcon1ImageView.getTag().toString());

如果您的图标来自服务器 - 唯一的方法是to store them to disk,然后重新加载它们。 (或者,更好的是,依赖于现有的图像缓存解决方案,如picasso

<强> UPD: 没有直接的方式将Drawable转换为int,但在这种特殊情况下,可以获得int,而不是Drawable来自PackageManager

ApplicationInfo applicationInfo = mContext.getPackageManager().getApplicationInfo(apps.get(position).getPname(),1);
int icon= applicationInfo.icon;

答案 1 :(得分:0)

这是我们如何获取应用程序图标并将其设置为图像视图。

my @nwlines = map{ $_=~m/^Important(.+?(?=\!special).+?)$/mi } @lines;

答案 2 :(得分:0)

唯一适用于我的解决方案是@KonstantinLoginov的chat,而不是使用:

val drawable = context.getPackageManager().getApplicationIcon(applicationInfo)

我传入了packageName:

val drawable = context.getPackageManager().getApplicationIcon(packageName),它是String,可以轻松传递。