la création d'un drawable partir de la carte sd pour le définir comme un fond de android
Je suis en train d'utiliser une image à partir de la carte sd et la définir comme fond pour un relativelayout. J'ai essayé d'autres solutions que j'ai trouvé ici et ailleurs, mais ils n'ont pas semblé fonctionner pour moi. voici mon code. J'ai commenté d'autres façons que j'ai essayé et n'a pas fonctionné. la seule chose qui a fonctionné pour moi a été l'aide de setBackgroudnResource et l'utilisation d'une ressource à partir de l'app, mais c'était juste pour un test pour s'assurer mRoot a été mis en place correctement. quand j'ai essayé tous les autres moyens, il n'a tout simplement pas de régler quoi que ce soit. Quelqu'un sait ce que je fais de mal, ou si il ya une meilleure façon de le faire?
//one way i tired...
//String extDir = Environment.getExternalStorageDirectory().toString();
//Drawable d = Drawable.createFromPath(extDir + "/pic.png");
//mRoot.setBackgroundDrawable(d);
//another way tried..
//Drawable d = Drawable.createFromPath("/sdcard/pic.png");
//mRoot.setBackgroundDrawable(d);
//last way i tried...
mRoot.setBackgroundDrawable(Drawable.createFromPath(new File(Environment.getExternalStorageDirectory(), "pic.png").getAbsolutePath()));
//worked, only to verify mRoot was setup correctly and it could be changed
//mRoot.setBackgroundResource(R.drawable.bkg);
OriginalL'auteur John | 2011-01-22
Vous devez vous connecter pour publier un commentaire.
Vous ne chargez pas un drawable partir de la carte SD, mais une image bitmap. Voici une méthode pour le charger avec la réduction de l'échantillonnage (de qualité) de sorte que le programme ne va pas se plaindre si l'image est trop grande. Alors je suppose que vous avez besoin de traiter cette image c'est à dire de la recadrer et redimensionner pour l'arrière-plan.
L'Uri ici peut être fourni à partir d'une galerie de sélecteur d'activité.
L'image peut ensuite être enregistrées en ressources de l'application et de le charger dans une imageView
Le testimage est dans la mémoire et n'est pas enregistré dans les ressources de l'application, ce qui vous devez faire pour le garder. Donc, pour obtenir un drawable cela devrait le faire: bmd2 = new BitmapDrawable(testimage); Essayer avec une petite image d'abord. La bonne façon est de passer de cette image une méthode qui sera mise à l'échelle pour l'arrière-plan et de l'enregistrer avant de le convertir à un drawable. À chaque étape, vérifiez que faites-vous à l'aide des journaux ou des Toasts. Essayez cette après readBitmap int h = bitmap.getHeight(); int w = bitmap.getWidth(); et le spectacle h et w pour voir la taille. Cette méthode fonctionne, je l'ai essayé sur de nombreux appareils...
ok, donc je check le bitmap de la hauteur et de la largeur et j'ai des valeurs. comment puis-je enregistrer les demandes de ressources ou de la bitmapdrawable le faire et il a juste besoin de plus de temps?
J'ai édité mon post. Je pense que vous devriez avoir maintenant tout le code pour extraire une image l'enregistrer et l'utiliser dans l'application.
merci à tous pour votre aide!
OriginalL'auteur Lumis
OriginalL'auteur lancha90
Je suggère de vérifier que le drawable est chargé correctement. Certaines choses à essayer:
C'est dommage que createFromPath() ne renvoie pas des exceptions si le fichier n'est pas trouvé, ou est en quelque sorte indéchiffrables. J'avais vérifiez que le fichier est là "adb shell ls -l /sdcard/pic.png". Quelqu'un d'autre avez une suggestion?
J'ai bien fait à l'aide d'une image bitmap comme je l'ai expliqué dans un commentaire à l'autre réponse, mais sa ne fonctionne pas encore et je reçois toutes les limites sont égales à 0. Des idées?
Je pense que ce n'est pas à trouver le fichier. Vérifiez que c'est l'endroit où vous pensez qu'il est, avec "adb shell ls -l /sdcard/pic.png"
OriginalL'auteur levis501