如何在ImageView
中使用URL引用的圖片?如何在Android中通過URL加載ImageView?
回答
無論如何,人們會問我的意見,並將其發佈爲答案。我張貼。
URL newurl = new URL(photo_url_str);
mIcon_val = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream());
profile_photo.setImageBitmap(mIcon_val);
謝謝。
你必須下載圖像首先
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;
}
然後使用Imageview.setImageBitmap設置位圖到ImageView的
你說得對。但只有這三條線有助於解決問題。 URL newurl = new URL(photo_url_str); mIcon_val = BitmapFactory.decodeStream(newurl.openConnection() \t \t \t \t \t .getInputStream()); profile_photo.setImageBitmap(mIcon_val);感謝你的回覆。 – Praveen 2010-03-19 08:57:04
對於URL - 導入java.net.URL; private static final int IO_BUFFER_SIZE = 4 * 1024; 最後一個是什麼? – Steve 2010-03-19 12:07:29
看到這裏的代碼:http://stackoverflow.com/questions/3118691/android-make-an-image-at-a-url-equal-to-imageviews-image – OneWorld 2010-09-24 08:36:10
你也可以使用此LoadingImageView視圖從URL中加載圖像:
http://blog.blundellapps.com/imageview-with-loading-spinner/
一旦你添加了從該鏈接可以實例化一個URL圖像視圖類文件:
在XML:
<com.blundell.tut.LoaderImageView
android:id="@+id/loaderImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
image="http://developer.android.com/images/dialog_buttons.png"
/>
在代碼:使用
final LoaderImageView image = new LoaderImageView(this, "http://developer.android.com/images/dialog_buttons.png");
和更新:
image.setImageDrawable("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");
public class LoadWebImg extends Activity {
String image_URL=
"http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView bmImage = (ImageView)findViewById(R.id.image);
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
Bitmap bm = LoadImage(image_URL, bmOptions);
bmImage.setImageBitmap(bm);
}
private Bitmap LoadImage(String URL, BitmapFactory.Options options)
{
Bitmap bitmap = null;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
bitmap = BitmapFactory.decodeStream(in, null, options);
in.close();
} catch (IOException e1) {
}
return bitmap;
}
private InputStream OpenHttpConnection(String strURL) throws IOException{
InputStream inputStream = null;
URL url = new URL(strURL);
URLConnection conn = url.openConnection();
try{
HttpURLConnection httpConn = (HttpURLConnection)conn;
httpConn.setRequestMethod("GET");
httpConn.connect();
if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
inputStream = httpConn.getInputStream();
}
}
catch (Exception ex)
{
}
return inputStream;
}
}
非常感謝,我一直在尋找的完美例子................, 但錯誤主題這應該在這裏==> [如何設置imageView的圖像從一個字符串?](http://stackoverflow.com/questions/5254100/how-to-set-an-imageviews-image-from-a-string) – VenomVendor 2012-01-14 17:52:21
我寫了一個類來處理這個問題,因爲它似乎在我的各種項目中經常需要:
https://github.com/koush/UrlImageViewHelper
UrlImageViewHelper將填補 ImageView的與搜索 在URL的圖像。
該示例將執行Google Image 異步搜索並加載/顯示結果 。
UrlImageViewHelper將自動下載,保存並緩存所有的 圖片,並將其映射到BitmapDrawables。 重複的網址不會被加載到 內存兩次。通過使用弱基準散列表 來管理位圖存儲器 ,因此只要圖像不再使用 ,它就會自動收集垃圾 。
這是什麼牌子,順便說一下? – 2012-04-13 17:21:15
@Shurane - Apache。我會在稍後記下它。 – koush 2012-04-16 17:48:25
看來我們需要使用這個,而不是https://github.com/koush/ion,因爲UrlImageViewHelper已被棄用,如在github項目的頁面上顯示的https://github.com/koush/UrlImageViewHelper。 – 2015-01-12 15:34:08
我最近發現一個線程here,因爲我必須做類似的事情與圖像的列表視圖,但原理很簡單,你可以在那裏所示(由jleedev)第一樣品課堂上閱讀。 你獲得圖像的輸入流(來自網絡)
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();
}
然後您存儲圖像繪製對象,你可以將它傳遞給ImageView的(通過setImageDrawable)。再次從上面的代碼片段看看整個線程。
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
我的項目中沒有DefaultHttpClient。 – 2015-11-28 08:16:34
您好我有最簡單的代碼試試這個
public class ImageFromUrlExample extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView imgView =(ImageView)findViewById(R.id.ImageView01);
Drawable drawable = LoadImageFromWebOperations("http://www.androidpeople.com/wp-content/uploads/2010/03/android.png");
imgView.setImageDrawable(drawable);
}
private Drawable LoadImageFromWebOperations(String url)
{
try{
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
}catch (Exception e) {
System.out.println("Exc="+e);
return null;
}
}
}
爲主。XML
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/ImageView01"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
試試這個
imageView.setImageBitmap(BitmapFactory.decodeStream(imageUrl.openStream()));//try/catch IOException and MalformedURLException outside
private Bitmap getImageBitmap(String url) {
Bitmap bm = null;
try {
URL aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
} catch (IOException e) {
Log.e(TAG, "Error getting bitmap", e);
}
return bm;
}
// show The Image in a ImageView
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
.execute("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");
public void onClick(View v) {
startActivity(new Intent(this, IndexActivity.class));
finish();
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(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);
}
}
確保您已在AndroidManifest.xml
設置以下的權限來訪問ŧ他互聯網。
<uses-permission android:name="android.permission.INTERNET" />
一個簡單和乾淨的方式做,這是使用開源庫Prime。
如果您是通過單擊按鈕加載圖像,上述接受的答案是非常好的,但是如果您在新活動中進行加載,則會凍結UI一兩秒。環顧四周,我發現一個簡單的asynctask消除了這個問題。
要使用的AsyncTask在你活動的末尾添加這個類:
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(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);
}
}
並使用來自您的onCreate()方法調用:
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
.execute(MY_URL_STRING);
結果是一個快速加載活動,根據用戶的網絡速度,稍後顯示一秒的圖像視圖。
這是快速和緊湊。很好地滿足了我的需求!謝謝! – 2013-01-17 01:25:07
真棒@凱爾。我喜歡你的榜樣。 – 2013-05-28 05:13:20
太棒了。謝謝!!!! – 2013-08-16 00:53:37
String img_url= //url of the image
URL url=new URL(img_url);
Bitmap bmp;
bmp=BitmapFactory.decodeStream(url.openConnection().getInputStream());
ImageView iv=(ImageView)findviewById(R.id.imageview);
iv.setImageBitmap(bmp);
此代碼已經過測試,它完全正常工作。
URL req = new URL(
"http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"
);
Bitmap mIcon_val = BitmapFactory.decodeStream(req.openConnection()
.getInputStream());
很多很好的信息在這裏......我最近發現了一個名爲SmartImageView的類,它似乎目前工作得很好。非常容易併入和使用。
http://loopj.com/android-smart-image-view/
https://github.com/loopj/android-smart-image-view
更新:我最後寫一個blog post about this,所以檢查它使用SmartImageView幫助。
2ND UPDATE:我現在總是使用畢加索(見上),並強烈推薦它。 :)
這是一個較晚的答覆,如上面建議AsyncTask
將會和谷歌搜索後有點我找到了一個更多的方式來解決這個問題。
my_image_view.setImageDrawable(Drawable.createFromStream((InputStream)new
URL(<String_url>).getContent(), "src"));
我自己試過,我還沒有面對任何問題。
這實際上是非常好的極簡主義!請記住,由於UI線程不允許網絡操作,因此需要在額外的'Thread'中運行。 – creativecreatorormaybenot 2018-03-08 13:02:31
這將幫助你......
定義的ImageView和加載圖像到它.....
Imageview i = (ImageView) vv.findViewById(R.id.img_country);
i.setImageBitmap(DownloadFullFromUrl(url));
然後定義這個方法:
public Bitmap DownloadFullFromUrl(String imageFullURL) {
Bitmap bm = null;
try {
URL url = new URL(imageFullURL);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
bm = BitmapFactory.decodeByteArray(baf.toByteArray(), 0,
baf.toByteArray().length);
} catch (IOException e) {
Log.d("ImageManager", "Error: " + e);
}
return bm;
}
任何容器中工作ImageView的,像列表視圖網格視圖,正常佈局
private class LoadImagefromUrl extends AsyncTask< Object, Void, Bitmap > {
ImageView ivPreview = null;
@Override
protected Bitmap doInBackground(Object... params) {
this.ivPreview = (ImageView) params[0];
String url = (String) params[1];
System.out.println(url);
return loadBitmap(url);
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
ivPreview.setImageBitmap(result);
}
}
public Bitmap loadBitmap(String url) {
URL newurl = null;
Bitmap bitmap = null;
try {
newurl = new URL(url);
bitmap = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
/** Usage **/
new LoadImagefromUrl().execute(imageView, url);
+1感謝您提供完整,簡單的解決方案。 – PeteH 2014-03-02 21:00:05
版本與異常處理和異步任務:
AsyncTask<URL, Void, Boolean> asyncTask = new AsyncTask<URL, Void, Boolean>() {
public Bitmap mIcon_val;
public IOException error;
@Override
protected Boolean doInBackground(URL... params) {
try {
mIcon_val = BitmapFactory.decodeStream(params[0].openConnection().getInputStream());
} catch (IOException e) {
this.error = e;
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean success) {
super.onPostExecute(success);
if (success) {
image.setImageBitmap(mIcon_val);
} else {
image.setImageBitmap(defaultImage);
}
}
};
try {
URL url = new URL(url);
asyncTask.execute(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
對於這樣的任務最好的現代化圖書館我的意見是Picasso由廣場。它允許圖像通過URL用一行代碼加載到ImageView的:
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
Picasso允許無障礙的圖像加載在你的應用程序經常在一行代碼!
使用搖籃:
compile 'com.squareup.picasso:picasso:2.5.2'
的代碼只是一條線!圖像加載Android上
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
許多常見的陷阱是由Picasso
- 處理ImageView的回收和下載取消在適配器自動處理。
- 複雜的圖像轉換與最小的內存使用。
- 自動內存和磁盤緩存。
2。Glide圖像加載和緩存庫爲Android專注於平滑滾動
使用搖籃:
repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}
//對於一個簡單的觀點:
@Override public void onCreate(Bundle savedInstanceState) {
...
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView);
}
//對於一個簡單的圖片列表:
@Override public View getView(int position, View recycled, ViewGroup container) {
final ImageView myImageView;
if (recycled == null) {
myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);
} else {
myImageView = (ImageView) recycled;
}
String url = myUrls.get(position);
Glide
.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.crossFade()
.into(myImageView);
return myImageView;
}
因此,如果url是localhost,意味着圖像在像xampp這樣的開發系統本地服務器數據庫中,我仍然可以從url =獲取圖像。 – blackjack 2014-06-09 10:31:22
這太棒了! – nemesisfixx 2014-08-13 11:08:25
@blackjack - 從應用程序本地主機將是智能手機本身。要訪問開發中的系統,智能手機和開發系統必須位於同一網絡中,並且您必須使用該網絡中開發系統的IP地址。 – Ridcully 2015-02-15 07:02:35
試試這種方式,希望這會幫助你解決你的問題。
這裏我將解釋如何使用「AndroidQuery」外部庫以asyncTask的方式從url/server加載圖像,並將加載的圖像緩存到設備文件或緩存區域。
- 下載「AndroidQuery」庫from here
- 複製/粘貼這個罐子項目的lib文件夾並添加這個庫項目構建路徑
- 現在我展示演示,如何使用它。
activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageFromUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"/>
<ProgressBar
android:id="@+id/pbrLoadImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</FrameLayout>
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
private AQuery aQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aQuery = new AQuery(this);
aQuery.id(R.id.imageFromUrl).progress(R.id.pbrLoadImage).image("http://itechthereforeiam.com/wp-content/uploads/2013/11/android-gone-packing.jpg",true,true);
}
}
Note : Here I just implemented common method to load image from url/server but you can use various types of method which can be provided by "AndroidQuery"to load your image easily.
- 1. 如何在Android中通過URL加載ImageView(json輸出)?
- 2. 圖像無法通過URL在ImageView中使用Picasso加載
- 3. imageView中的空異常通過Url android
- 4. 如何通過URL在ImageView中設置圖像Android
- 5. Android ImageView - 從URL加載圖像
- 6. 通過ImageView的Android ImageView OnTouchListener
- 7. 如何在Java,Android下載ImageView ImageView?
- 8. 如何通過iOS中的UISwipeGestureRecognizer在ImageView中通過SwipeLeft在ImageView中顯示NextImage?
- 9. 的Android如何通過點擊ImageView的
- 10. 通過ImageView Android的WebView Android
- 11. Android通過代碼添加許多Imageview
- 12. 在Android中通過ImageView繪製圖層
- 13. 在Android ImageView中加載圖片
- 14. 在Android中加載Imageview的進度條
- 15. 在android中加載圖像imageview
- 16. 如何在android中通過相同activity中的imageview?
- 17. 如何從android中的URL將圖像加載到動態創建的imageview中?
- 18. 通過代碼在ImageView中加載圖像
- 19. 如何在Android的listview中添加imageview
- 20. 在Android中如何通過點擊ImageView來放置像素
- 21. Android + Volley:如何在加載過程中將圖像圖標設置爲ImageView?
- 22. 如何在Android ImageView中顯示加載動畫?
- 23. Android - 如何在Imageview中加載20mb以上的圖像
- 24. 如何在ImageView中加載隨機圖像android
- 25. 如何在android動畫中將圖像加載到imageview?
- 26. 如何在Android中完全加載ImageView時獲取
- 27. 如何從android中的url加載類?
- 28. android - ViewHolder ImageView隨機加載
- 29. 如何通過AWS API網關在Android webview中加載網關
- 30. 如何通過操作腳本中的URL加載圖像3.0
試試這一個http://stackoverflow.com/questions/14332296/how-to-set圖片來自網址使用asynctask/15797963#15797963 – comeGetSome 2013-04-07 16:27:17
使用畢加索... http://stackoverflow.com/a/23865531/3535286 – chiragkyada 2014-05-26 08:12:47
使用Glide http://www.gadgetsaint.com /android/circular-images-glide-library-android/#.WEj42rJ96Hs – ASP 2016-12-08 06:10:37