Динамически заполнять Android ImageView с внешними ресурсами - PullRequest
0 голосов
/ 21 декабря 2011

Как включить статическое изображение

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.67"
        android:src="@drawable/static_image" />

в ImageView, источник которого можно динамически установить для данных, которых еще нет в папке res?

То есть у моего приложения есть значок на экране, но фактическое изображение значка загружается с внешнего сервера и может динамически меняться. Как мне обновить ImageView с желаемым изображением после загрузки? Я хочу что-то функционально, как:

Image selectedImage = //get from server

myImageView.setImage(selectedImage);

Ответы [ 4 ]

2 голосов
/ 21 декабря 2011

Ур вопрос неясный. Если вы просто хотите, чтобы изображение (то есть в некотором URL-адресе) было установлено в режим просмотра изображений,

Bitmap bmp=getBitmapFromURL(ur url here);
imgview.setImageBitmap(bmp);

и напишите эту функцию:

public static Bitmap getBitmapFromURL(String src) {  
        try {

            URL url = new URL(src);
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap mybitmap = BitmapFactory.decodeStream(input);

            return mybitmap;

        } catch (Exception ex) {

            return null;
        }
1 голос
/ 21 декабря 2011

В соответствии с вашим вопросом я понимаю что-то вроде

 ImageView selectedImage;
 selectedImage = (ImageView)findViewById(R.id.imageView1);
 Bitmap bmImg;

 downloadFile(imageUrl);

И это downloadFile() Метод ...

 void downloadFile(String fileUrl){
          URL myFileUrl =null;          
          try {
               myFileUrl= new URL(fileUrl);
          } catch (MalformedURLException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }
          try {
               HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
               conn.setDoInput(true);
               conn.connect();
               InputStream is = conn.getInputStream();

               bmImg = BitmapFactory.decodeStream(is);
               selectedImage.setImageBitmap(bmImg);
          } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }
     }
1 голос
/ 21 декабря 2011
yourImageView.setImageBitmap(bitmap);

для получения растрового изображения с сервера:

public static Bitmap loadBitmap(String url) {
    Bitmap bitmap = null;
    InputStream in = null;
    BufferedOutputStream out = null;

    try {
        in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE);

        final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
        out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
        copy(in, out);
        out.flush();

        final byte[] data = dataStream.toByteArray();
        BitmapFactory.Options options = new BitmapFactory.Options();
        //options.inSampleSize = 1;

        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options);
    } catch (IOException e) {
        Log.e(TAG, "Could not load Bitmap from: " + url);
    } finally {
        closeStream(in);
        closeStream(out);
    }

    return bitmap;
}
0 голосов
/ 21 декабря 2011

Вам нужно создать собственный вид и переопределить onDraw (). Оттуда вам предоставляется рисунок холст, и вы можете делать все, что угодно. Таким образом, предполагая, что ваше динамическое изображение может быть преобразовано в растровое изображение, существует множество методов drawBitmap (), которые вы можете использовать из Canvas.

Обратите внимание, что вы также должны переопределить onMeasure (), который позволяет вашему представлению сообщать менеджеру макета, сколько места вам нужно.

Здесь много полезной информации: http://developer.android.com/guide/topics/ui/custom-components.html

...