NGTerenas Posté(e) 27 décembre 2009 Share Posté(e) 27 décembre 2009 Bonjour à tous, Mon petit problème du moment est le suivant : J'ai écrit un petit bout de code qui me permet de skinner certains éléments de mon appli. Par défaut, l'application va chercher les gfx (aux formats png et jpg) dans res/drawable mais j'aimerai bien que ces ressources soient également déposées sur la SDCard si elle ne s'y trouvent pas déjà. J'ai pas trouvé de fonction qui pourrait convertir un Drawable en File, tout comme je n'ai pas trouvé de fonction me retournant l'URI de mes drawables. Bref, je n'arrive pas à les avoir sous forme de fichiers. Suis-je obligé de convertir mon Drawable en Bitmap, d'en faire un compress() (ou je ne sais quoi) et de balancer le buffer dans un OutputStream ? D'ailleurs si vous avez des samples, je suis preneur :X Ca me parait un poil lourd pour juste un copier/coller, quand on voit qu'un File.mkdirs(String path) est simplissime pour la création récursive de répertoires -_-; Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 27 décembre 2009 Share Posté(e) 27 décembre 2009 Est-ce que nos 2 soucis (https://www.frandroid.com/forum/viewtopic.php?id=5803 ) pourraient avoir une réponse commune? Ta question comprend beaucoup de termes un peu trop techniques pour moi, mais j'ai l'impression qu'on cherche à peu pres la même chose.. Me trompe-je? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
NGTerenas Posté(e) 27 décembre 2009 Auteur Share Posté(e) 27 décembre 2009 Nos problèmes se rejoignent effectivement, j'avais lu ton thread avant de poster et tu prends le problème dans l'autre sens. En fait, étant donné que ton APK est en quelque sorte un JAR (une archive java quoi), tu ne peux pas modifier son contenu... Donc le seul moyen que je vois est d'externaliser le contenu vers une autre source de données. Or, si tu veux quelque chose d'un peu générique, il faut que ta skin (ou tes icones) soient traitées de la même manière (on va me tuer de dire ça... je sais bien que c'est pas vrai, sinon les interfaces ne serviraient à rien, mais c'est pour faire simple ok?) donc également externalisées (quitte à être ET dans le APK, ET sur SD). Donc l'idée c'est que ton élément graphique soit déposé sur SDCard, et ton application ne va chercher que sur ta SD. Problèmes à résoudre : - Savoir identifier à quoi correspond chaque fichier sur ta SD, donc hiérarchiser correctement le contenu suivant tes besoins ET définir des conventions de nommage - Savoir gérer les cas "à défaut" (que faire si pas de carte SD dispo ? ou bien si une skin a été choisie sur SD et que la carte SD devient indispo ? etc...). Dans l'absolu, puisque la "skin" (ou icone) par défaut se trouve dans le APK, il suffit de contrôler l'existence de la sélection et à défaut de prendre celui du APK - Copier la skin par défaut de res/drawable vers /sdcard/* Est-on d'accord ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 27 décembre 2009 Share Posté(e) 27 décembre 2009 (modifié) On ets tout à fait d'accord! Tes 3 points d'exception ne me poseront, je le pense, aucun soucis. Je pense que tu es beaucoup plus calé que moi et que tu as plus de chances de trouver la réponse. Je vais faire le salaud et attendre que tu trouves, mais je partagerai tout ce que je trouve ici. J'espere que tu penseras à moi quand tu auras la soluce. C'est vraiment un problème dont il me tient à coeur de trouver une solution rapidement! Modifié 27 décembre 2009 par Profete162 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 27 décembre 2009 Share Posté(e) 27 décembre 2009 c est ce que je fais dans taskiller, je te balance un sample sous peu. -- Posté depuis BBFoC Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 27 décembre 2009 Share Posté(e) 27 décembre 2009 bon bein a priori t'avais tout ce qu'il faut, j ai pas trouvé plus simple: Bitmap bmp = Bitmap.createBitmap( 48,48, Bitmap.Config.ARGB_8888);//ARGB_8888); Canvas canvas = new Canvas(bmp); FileOutputStream fos = new FileOutputStream("/sdcard/taskiller/widget.png"); Drawable d = PreferenceList.this.getResources().getDrawable(R.drawable.skull_icon3); d.setBounds(0, 0, 48, 48); d.draw(canvas); bmp.compress(CompressFormat.PNG, 75, fos); fos.flush(); fos.close(); pour la sélection du skin SD ou pas je fais simple: si au lancement le fichier /sdcard/taskiller/.theme est present alors le skin est sur la SD. ET les Drawable sont chargés en mémoire sinon ça fou la m**** quand on branche l'USB (coupure). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
NGTerenas Posté(e) 27 décembre 2009 Auteur Share Posté(e) 27 décembre 2009 On ets tout à fait d'accord! Tes 3 points d'exception ne me poseront, je le pense, aucun soucis. Je pense que tu es beaucoup plus calé que moi et que tu as plus de chances de trouver la réponse. Je vais faire le salaud et attendre que tu trouves, mais je partagerai tout ce que je trouve ici. J'espere que tu penseras à moi quand tu auras la soluce. C'est vraiment un problème dont il me tient à coeur de trouver une solution rapidement! Je pense que tu te méprends... :p Je débute tout juste en Java. Par contre la POO, ça je connais bien, donc je m'en sors pas trop trop mal =) Mais no worry, popolbx est venu pour nous sauver ^_^ Personnelement, j'ai quelque chose comme ca : /sdcard/data/fr.om.game.battlecardtriad/skins/ dans skins tu peux créer 0..n dossiers Je stocke cette liste de dossiers qqpart, static, et je stocke la currentSkin dans une sharedPreference. Pour charger mes images, j'ai une fonction loadBitmap(String filename, String skinName) qui récupère le nom du fichier attendu (car les miens sont fixes, toi tu auras plutôt un folder "icons/" et tout le contenu du dossier pourra être une icône potentielle, enfin à réfléchir) pour la skin donnée (récupérée de ma sharedpreference). Si je ne trouve pas ce que je cherche, alors je retourne celle par défaut dans res/drawable. @popolbx : Oui j'avais quelque chose dans ce style là en tête... Mais j'espérais qu'il y avait beaucoup plus simple =/ Apparemment non... merci beaucoup en tout cas =) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.