آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

MEHDI007  10 سال پیش  10 سال پیش
+22 0

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

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

فرض کنید که یک عکس در اینترنت قرار دارد و می خواهیم آن را در یک 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 نمایش داده می شود.

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

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

0 0
آموزشتون جامع و خوب بود شاید یکم بشه جمع تر نوشت.چون دست خط هرکس مخصوصه خودشه دیگه:) ولی این کد ساده و خوبیه.ممنون مهدی جان. (10 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
حامد  10 سال پیش
+10 0

ممنون از MEHDI007 جان

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

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

https://github.com/hamedjj/picasso

پاسخ به سوال 
PandaStudio  10 سال پیش
+4 0

سلام

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

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

لینک

پاسخ به سوال 
MEHDI007  10 سال پیش
+2 0

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

در پروژه اندروید، یک کلاس با نام 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" />

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


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