web-dev-qa-db-fra.com

Comment convertir Drawable en int et vice versa sous Android

Je veux convertir Drawable en int puis inversement.En gros, je veux enregistrer Arraylist object dans sharedPrefrence . Pour cela, j'ai la méthode de conversion Implement Gson to Srtring. Si j'utilise ici Drawable au lieu de int alors la conversion en chaîne Gson prend beaucoup de temps. donc je veux utiliser int au lieu de 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()));

Où se trouve 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;
}

Voici la source de la conversion de l'objet personnalisé ArrayList en chaîne afin que je puisse l'enregistrer dans 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);
6
M.ArslanKhan

Int -> Drawable:

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

Drawable -> Int:

(Je suppose que vous remplissez List<AppInfo> apps avec les applications dont les icônes sont déjà dans le dossier res/drawable de votre application)

Une fois que vous avez défini votre R.drawable.app1 sur ImageView, vous pouvez également lui attribuer une tag pour identifier la ressource dans la ImageView ultérieurement:

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

Si vos icônes proviennent du serveur - le seul moyen est de les stocker sur le disque puis de les recharger. (ou mieux, utilisez les solutions de mise en cache d’images existantes telles que picasso )

UPD: Il n'y a pas de moyen direct de convertir Drawable en int, mais dans ce cas particulier, il est possible d'obtenir le int au lieu de Drawable à partir de PackageManager:

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

Voici comment nous pouvons aller chercher l’icône de l’application et la définir pour une imageview.

                   applicationInfo=mContext.getPackageManager().getApplicationInfo(apps.get(position).getPname(),PackageManager.GET_META_DATA);
                   int icon= applicationInfo.icon;
                   Rsources resources=mContext.getPackageManager().getResourcesForApplication(applicationInfo);

                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
                        holder.itemIcon.setImageDrawable(resources.getDrawable(icon,null));
                    }else
                    {
                         holder.itemIcon.setImageDrawable(resources.getDrawable(icon));

                    }
0
Lins Louis