بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

نمایش یک عکس درImageViewبا URL+یک روش دیگر!حتما ببینید

مدیریت گفتگو
MEHDI007 11 سال پیش
آخرین تغییر: 11 سال پیش

روش دوم در اخرین پست!

خوب از عنوان اموزش معلومه البته درسته که چیز ساده ای است ولی ممکنه بعضی از دوستان خوب یاد نگرفته باشند خوب بریم سر بحث اصلی یعنی اموزش!

فرض کنید که یک عکس در اینترنت قرار دارد و می خواهیم آن را در یک ImageView در برنامه اندروید خود نمایش بدهیم. آدرس اینترنتی (آدرس URL) عکس را به صورت آدرس زیر فرض میکنیم مثال:

 http://uncocoder.com/imageview/image.png

ابتدا یک تابع به صورت زیر تعریف می کنیم :

 private class uncocoderDownloadImage extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;

public uncocoderDownloadImage(ImageView bmImage) {
this.bmImage = bmImage;
}

protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}

protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}

سپس با فرض اینکه ImageView ای که می خواهیم عکس در آن نمایش داده شود، دارای id برابر imageView1 باشد، کدهای زیر را می نویسیم (آدرس URL در کدها را به آدرس URL مورد نظر خود تغییر بدهید) :

 
imageView imageView = (ImageView) findViewById(R.id.imageView1);
new uncocoderDownloadImage(imageView).execute("http://uncocoder.com/imageview/image.png");

دقت کنید که حتما باید اجازه دسترسی به اینترنت، به برنامه اندروید افزوده شود، بنابراین فایل AndroidManifest.xml پروژه اندروید را باز کرده و کد زیر را به آن اضافه می کنیم (افزودن اجازه دسترسی به اینترنت)

 <uses-permission android:name="android.permission.INTERNET" />

بد نیست تذکر داده شود که برای بارگذاری عکس از اینترنت و سپس نمایش آن در ImageView ، از AsyncTask استفاده کرده ایم. بهتر است که در فایل xml ای که ImageView را تعریف کرده اید، ابتدا یک عکس پیش فرض تعیین کنید تا در حین بارگذاری عکس از اینترنت، در ImageView نمایش داده شود و بعد از بارگذاری عکس از اینترنت، عکس اینترنتی در ImageView نمایش داده می شود.

خوب راه های زیادی وجود دارد و اگه دوستان راه های دیگه رو هم بلد هستند اموزش رو بزارند.ممگنه برای بعضی ها این راه ساده تر باشه ممکنه برای بعضی ها سخت باشه.اگه دوستان راه ساده تری به نظرشون رسید بگید.با تشکر

روش دوم در اخرین پست!

نظرات

ATRAS 11 سال پیش
آموزشتون جامع و خوب بود شاید یکم بشه جمع تر نوشت.چون دست خط هرکس مخصوصه خودشه دیگه:) ولی این کد ساده و خوبیه.ممنون مهدی جان.

پاسخ‌ها 3

حامد 11 سال پیش

ممنون از MEHDI007 جان

همچنین برای نمایش عکس میتوانید از لایبری picasso استفاده کنید

picasso لایبری قدرتمند برای دانلود تصاویر و کش کردن آنها است

https://github.com/hamedjj/picasso

نظرات

PandaStudio 11 سال پیش

سلام

ممنون آموزش خوبی بود

توی این پست که قبلا من ایجاد کردم با بچه ها به این نتیجه رسیدیم که برای عکس های آنلاین بهتره از لایبرری UIL استفاده کنیم خیلی خوب و سریعه مخصوصا برای تعداد زیاد تصویر

لینک

نظرات

MEHDI007 11 سال پیش

خوب این یک راه دیگه است که گفتم اشکالی نداره تا این رو هم بزارم چون بر اساس پیچیدگی برنامه اندروید، ممکن است که به روش های متفاوتی نیاز پیدا کنید و بنابراین  باید روش های دیگه رو هم یاد بگیرید.امید وارم مفید باشه:)

در پروژه اندروید، یک کلاس با نام DrawableManager می سازیم (یعنی یک فایل با نام DrawableManager.java). کدهای کلاس DrawableManager را به صورت زیر می نویسیم :

 
package com.uncocoder.imageload;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ImageView;

public class DrawableManager {
private final Map<String, Drawable> drawableMap;

public DrawableManager() {
drawableMap = new HashMap<String, Drawable>();
}

public Drawable fetchDrawable(String urlString) {
if (drawableMap.containsKey(urlString)) {
return drawableMap.get(urlString);
}

Log.d(this.getClass().getSimpleName(), "image url:" + urlString);
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");


if (drawable != null) {
drawableMap.put(urlString, drawable);
Log.d(this.getClass().getSimpleName(), "got a thumbnail drawable: " + drawable.getBounds() + ", "
+ drawable.getIntrinsicHeight() + "," + drawable.getIntrinsicWidth() + ", "
+ drawable.getMinimumHeight() + "," + drawable.getMinimumWidth());
} else {
Log.w(this.getClass().getSimpleName(), "could not get thumbnail");
}

return drawable;
} catch (MalformedURLException e) {
Log.e(this.getClass().getSimpleName(), "fetchDrawable failed", e);
return null;
} catch (IOException e) {
Log.e(this.getClass().getSimpleName(), "fetchDrawable failed", e);
return null;
}
}

public void fetchDrawableOnThread(final String urlString, final ImageView imageView) {
if (drawableMap.containsKey(urlString)) {
imageView.setImageDrawable(drawableMap.get(urlString));
}

final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
// imageView.setImageDrawable((Drawable) message.obj);
imageView.setBackgroundDrawable((Drawable) message.obj);
}
};

Thread thread = new Thread() {
@Override
public void run() {
//TODO : set imageView to a "pending" image
Drawable drawable = fetchDrawable(urlString);
Message message = handler.obtainMessage(1, drawable);
handler.sendMessage(message);
}
};
thread.start();
}

private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}

دقت کنید که نام package که در خط اول کدها نوشته شده است را باید به نام package پروژه اندروید خود تغییر بدهید.

 

فرض کنید که آدرس اینترنتی (آدرس URL) عکس، به صورت زیر باشد (یک آدرس فرضی) :

http://uncocoder.com/imageview/image.png

اکنون فرض کنید که در یک activity از برنامه اندروید، بخواهیم همان عکسی که آدرس URL آن را ذکر کردیم، در یک ImageView نمایش بدهیم. برای این منظور، کدهای زیر را در میان کدهای آن activity می نویسیم :

 

 ImageView iv = (ImageView) result.findViewById(R.id.imageView1);
DrawableManager dm = new DrawableManager();
dm.fetchDrawableOnThread("http://uncocoder.com/imageview/image.png",iv)

در کد بالا، فرض کرده ایم که ImageView دارای id برابر imageView1 باشد.

دقت کنید که حتما باید اجازه دسترسی به اینترنت، به برنامه اندروید افزوده شود، بنابراین فایل AndroidManifest.xml پروژه اندروید را باز کرده و کد زیر را به آن اضافه می کنیم (افزودن اجازه دسترسی به اینترنت)

 <uses-permission android:name="android.permission.INTERNET" />

امیدوارم مفید باشه:)و دیدن این لینک هم خالی از لطف نیست.خیلی عالیه!

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .