Создание DrawDable от SD-карты, чтобы установить в качестве фона в Android - PullRequest
3 голосов
/ 22 января 2011

Я пытаюсь использовать изображение с SD-карты и установить его в качестве фона для относительной разметки. Я пробовал другие решения, которые я нашел здесь и в других местах, но они, похоже, не работают для меня. вот мой код Я прокомментировал другие способы, которые я пробовал и не работал. единственное, что работало для меня, это использование setBackgroudnResource и использование ресурса из приложения, но это было просто для проверки правильности установки mRoot. когда я попробовал все остальные способы, он просто ничего не установил. Кто-нибудь знает, что я делаю не так, или есть лучший способ сделать это?

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

Ответы [ 3 ]

10 голосов
/ 23 января 2011

Вы загружаете не отрисовку с SD-карты, а растровое изображение.Вот способ загрузить его с уменьшенной выборкой (качеством), чтобы программа не жаловалась, если изображение слишком велико.Тогда, я думаю, вам нужно обработать это растровое изображение, т.е. обрезать его и изменить размер для фона.

         // Read bitmap from Uri
     public Bitmap readBitmap(Uri selectedImage) {
         Bitmap bm = null;
         BitmapFactory.Options options = new BitmapFactory.Options();
         options.inSampleSize = 2; //reduce quality 
         AssetFileDescriptor fileDescriptor =null;
         try {
             fileDescriptor = this.getContentResolver().openAssetFileDescriptor(selectedImage,"r");
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }
         finally{
             try {
                 bm = BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);
                 fileDescriptor.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
         return bm;
     }

Uri здесь может быть получен из действия выбора галереи.

Затем изображение можно сохранить в ресурсах приложения и загрузить в imageView

        private void saveBackground(Bitmap Background) {
        String strBackgroundFilename = "background_custom.jpg";
        try {
            Background.compress(CompressFormat.JPEG, 80, openFileOutput(strBackgroundFilename, MODE_PRIVATE));
        } catch (Exception e) {
            Log.e(DEBUG_TAG, "Background compression and save failed.", e);
        }

        Uri imageUriToSaveCameraImageTo = Uri.fromFile(new File(BackgroundSettings.this.getFilesDir(), strBackgroundFilename));

        // Load this image
        Bitmap bitmapImage = BitmapFactory.decodeFile(imageUriToSaveCameraImageTo.getPath());
        Drawable bgrImage = new BitmapDrawable(bitmapImage);

        //show it in a view
        ImageView backgroundView = (ImageView) findViewById(R.id.BackgroundImageView);
        backgroundView.setImageURI(null); 
        backgroundView.setImageDrawable(bgrImage);
    }
5 голосов
/ 19 июня 2012
File file = new File( url.getAbsolutePath(), imageUrl);

                if (file.exists()) {

                    mDrawable = Drawable.createFromPath(file.getAbsolutePath());

                }
0 голосов
/ 23 января 2011

Я предлагаю проверить, правильно ли загружается отрисовка.Некоторые вещи, которые можно попробовать:

  • Попробуйте использовать другое изображение на SD-карте
  • Поместите pic.png в R.drawable и убедитесь, что mRoot.setBackgroundResource () выполняет то, что вы ожидаете1006 *
  • После загрузки Drawable, проверьте d.getBounds (), чтобы убедиться, что это то, что вы ожидаете
...