Lazingas nuotraukų įkėlimas į „ListView“

ListView kad būtų rodomi kai kurie su šiais vaizdais susiję vaizdai ir antraštės. Gaunu vaizdus iš žiniatinklio. Ar yra būdas slėpti vaizdus, ​​todėl, kai rodomas tekstas, vartotojo sąsaja nėra užrakinta ir vaizdai rodomi įkėlus?

Bendras vaizdų skaičius nėra nustatytas.

1738 m
12 февр. lostInTransit yra nustatytas vasario 12 d 2009-02-12 18:59 '09 18:59 2009-02-12 18:59
@ 38 atsakymai
  • 1
  • 2

Štai ką aš sukūriau, kad išsaugotumėte vaizdus, ​​kurie šiuo metu rodomi mano programoje. Atkreipkite dėmesį, kad čia naudojamas „Log“ objektas yra mano individualus apvalkalas aplink galutinį „Log“ klasę, esančią „Android“.

 package com.wilson.android.library; /* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific > raštu package com.wilson.android.library; /* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific > 
1018
18 февр. James A Wilson atsakymas vasario 18 d. 2009-02-18 06:56 '09, 6:56 val. 2009-02-18 06:56

Aš padariau paprastą vaizdą, rodantį „ tingų“ sąrašą (esantis „GitHub“). Tai gali būti naudinga žmogui. Jis įkelia vaizdus į fono srautą. Vaizdai saugomi talpykloje SD kortelėje ir atmintyje. Talpyklos įgyvendinimas yra labai paprastas ir pakankamas demonstravimui. Aš sumažinsiu vaizdus naudojant inSampleSize, kad sumažintumėte atminties suvartojimą. Aš taip pat stengiuosi tinkamai perdirbti perdirbtas rūšis.

border=0

2019

983
18 июня '10 в 11:04 2010-06-18 11:04 atsakymą pateikė Fedoras birželio 18 d. 10 val. 11:04 2010-06-18 11:04

Rekomenduoju atviro kodo įrankį „ Universal Image Loader“ . Iš pradžių jis buvo pagrįstas Fyodor Vlasov projektu „ LazyList“ ir nuo to laiko gerokai pagerėjo.

  • Atsisiųskite kelių sriegių vaizdą
  • Plačios „ImageLoader“ konfigūracijos konfigūracijos galimybė (srauto menininkai, downlaoder, dekoderiai, atminties ir disko talpyklos, vaizdo rodymo parametrai ir tt).
  • Galimybė talpinti vaizdus atminties ir (arba) sysytem įrenginio faile (arba SD kortelėje)
  • Gebėjimas „klausytis“ atsisiuntimo proceso.
  • Galimybė pritaikyti kiekvieną vaizdo skambutį atskirais parametrais
  • Valdiklio palaikymas
  • „Android“ 2.0 + palaikymas.

2019

19 дек. Atsakymą NOSTRA pateikė gruodžio 19 d. 2011-12-19 16:53 '11, 16:53, 2011-12-19 16:53

Daugialypis našumas , „Gill Debunn“ pamoka.

Tai iš „Android“ kūrėjo tinklaraščio. Siūlomame kode naudojamas:

  • AsyncTasks .
  • Sunkus, ribotas dydis, FIFO cache .
  • Minkštas, lengvas garbage collect .
  • Drawable vietos Drawable įkrovos metu.

2019

147
12 авг. atsakymas, kurį pateikė Thomas Ahle 12 rug. 2010-08-12 14:07 '10, 14:07, 2010-08-12 14:07

Atnaujinimas: atkreipkite dėmesį, kad šis atsakymas dabar yra gana neveiksmingas. Šiukšlių surinkėjas agresyviai veikia „SoftReference“ ir „WeakReference“, todėl šis kodas netinka naujoms programoms. (Vietoj to, pabandykite bibliotekose, pvz., „ Universal Image Downloader“ , rasti kitus atsakymus.)

Ačiū Jamesui už kodą ir „Bao-Long“ už pasiūlymą naudoti „SoftReference“. „James“ kode įdiegiau „SoftReference“ pakeitimą. Deja, „SoftReferences“ mano vaizdus surinko per greitai. Mano atveju tai buvo gerai be „SoftReference“ medžiagos, nes mano sąrašo dydis yra ribotas ir mano vaizdai yra maži.

Prieš metus aptarti „SoftReferences“ „Google“ grupėms: nuoroda į srautą . Kaip sprendimas per anksti šiukšlių surinkimui, jie siūlo galimybę rankiniu būdu nustatyti VM krūvos dydį naudodami dalvik.system.VMRuntime.setMinimumHeapSize (), kuris man nėra labai patrauklus.

 public DrawableManager() { drawableMap = new HashMap<String, SoftReference<Drawable>>(); } public Drawable fetchDrawable(String urlString) { SoftReference<Drawable> drawableRef = drawableMap.get(urlString); if (drawableRef != null) { Drawable drawable = drawableRef.get(); if (drawable != null) return drawable; // Reference has expired so remove the key from drawableMap drawableMap.remove(urlString); } if (Constants.LOGGING) Log.d(this.getClass().getSimpleName(), "image url:" + urlString); try { InputStream is = fetch(urlString); Drawable drawable = Drawable.createFromStream(is, "src"); drawableRef = new SoftReference<Drawable>(drawable); drawableMap.put(urlString, drawableRef); if (Constants.LOGGING) Log.d(this.getClass().getSimpleName(), "got a thumbnail drawable: " + drawable.getBounds() + ", " + drawable.getIntrinsicHeight() + "," + drawable.getIntrinsicWidth() + ", " + drawable.getMinimumHeight() + "," + drawable.getMinimumWidth()); return drawableRef.get(); } catch (MalformedURLException e) { if (Constants.LOGGING) Log.e(this.getClass().getSimpleName(), "fetchDrawable failed", e); return null; } catch (IOException e) { if (Constants.LOGGING) Log.e(this.getClass().getSimpleName(), "fetchDrawable failed", e); return null; } } public void fetchDrawableOnThread(final String urlString, final ImageView imageView) { SoftReference<Drawable> drawableRef = drawableMap.get(urlString); if (drawableRef != null) { Drawable drawable = drawableRef.get(); if (drawable != null) { imageView.setImageDrawable(drawableRef.get()); return; } // Reference has expired so remove the key from drawableMap drawableMap.remove(urlString); } final Handler handler = new Handler() { @Override public void handleMessage(Message message) { imageView.setImageDrawable((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(); } 
102
05 мая '10 в 16:16 2010-05-05 16:16 Atsakymas suteiktas TalkLittle 05 gegužės 10 d. 16:16 2010-05-05 16:16

Picasso

Naudokite „Picasso Jake Wharton“ biblioteką. („Perfect ImageLoading Library“ sukuria „ActionBarSherlock“ kūrėją)

Galinga „Android“ nuotraukų įkėlimo ir talpinimo biblioteka.

„Android“ programoms vaizdai prideda labai reikalingą kontekstą ir vaizdinį atspalvį. „Picasso“ leidžia lengvai įkelti nuotraukas į savo programą - dažnai vienoje kodo eilutėje!

 Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

„Picasso“ automatiškai tvarko daugelį „Android“ vaizdų įkėlimo klaidų:

„ImageView“ programos apdorojimas ir atsisakymo atsisakymas adapteryje. Išsami vaizdų transformacija su minimaliu atminties naudojimu. Automatinis atminties ir disko talpinimas.

Jake Wharton Picasso biblioteka

Glide

„Glide“ yra greita ir efektyvi aplinka, skirta „Android“ atviro kodo formatams valdyti, įskaitant daugialypės terpės dekodavimą, atmintį ir disko talpyklą bei išteklių integravimą į paprastą ir patogią sąsają.

„Glide“ palaiko vaizdo įrašų srautų, vaizdų ir animuotų GIF failų atranką, dekodavimą ir rodymą. „Glide“ apima lanksčią api, kuri leidžia kūrėjams prisijungti prie beveik bet kokio tinklo stiklo. Pagal nutylėjimą „Glide“ naudoja savo steką pagal „HttpUrlConnection“, bet taip pat apima komunalines paslaugas, prijungtas prie „Google Volley“ projekto arba „Square OkHttp“.

 Glide.with(this).load("http://goo.gl/h8qOq7").into(imageView); 

„Glide“ pirmasis dėmesys skiriamas bet kokio vaizdų sąrašo slinkimui kaip įmanoma sklandžiau ir greičiau, tačiau „Glide“ taip pat veikia beveik bet kokiu atveju, kai reikia pasirinkti, keisti dydį ir rodyti tolimą vaizdą.

„Glide Image Download“ biblioteka

„Fresco“ iš „Facebook“

„Fresco“ yra galinga sistema, skirta atvaizdams atvaizduoti „Android“ programose.

„Fresco“ rūpinasi vaizdų įkėlimu ir rodymu, todėl jums nereikia. Jis atsiunčia vaizdus iš tinklo, vietos saugojimo vietos arba vietinių išteklių ir rodo vietos žymeklį prieš atvaizdą. Ji turi du lygių talpyklos lygius; viena atmintyje ir kita vidinėje atmintyje.

Fresco github

„Android“ operacinėje sistemoje „4.x“ ir žemiau „Fresco“ atiduoda vaizdus specialioje „Android“ atminties srityje. Tai leidžia jūsų programai dirbti greičiau - ir kenčia nuo baisios OutOfMemoryError daug mažiau.

Fresco dokumentacija

84
04 апр. atsakymą pateikė Ashwin S Ashok 04 Bal. 2014-04-04 15:35 '14, 15:35 2014-04-04 15:35

Didelio našumo krautuvas - išnagrinėjęs čia siūlomus metodus, kai kuriuos pakeitimus naudoju Ben sprendimu.

  • Supratau, kad darbas su brėžiniais yra greitesnis nei su bitų žemėlapiais, todėl aš naudoju piešinius

  • „SoftReference“ naudojimas yra puikus, tačiau pernelyg dažnai pašalina talpykloje išsaugotą vaizdą, todėl pridėjau susietą sąrašą, kuriame yra nuorodos į vaizdus, ​​kurie neleidžia ištrinti vaizdo, kol jis pasiekia iš anksto nustatytą dydį.

  • Jei norite atidaryti „InputStream“, naudoju java.net.URLConnection, kuri leidžia naudoti žiniatinklio talpyklą (pirmiausia turite nustatyti atsakymo talpyklą, bet tai kita istorija)

Mano kodas yra:

 import java.util.Map; import java.util.HashMap; import java.util.LinkedList; import java.util.Collections; import java.util.WeakHashMap; import java.> 
77
22 окт. Atsakymą pateikė Asaf Pinhassi spalio 22 d. 2011-10-22 19:44 '11, 19:44, 2011-10-22 19:44

Stebėjau šią „Android“ pamoką, ir manau, kad tai puiki galimybė įkelti vaizdus be užrakinimo pagrindinės vartotojo sąsajos. Jis taip pat tvarko talpyklą ir sprendžia daugelio vaizdų slinkimą

2019

75
28 дек. atsakymas duodamas iki 28 d. 2012-12-28 02:27 '12 at 2:27 2012-12-28 02:27

1. „ Picasso“ leidžia lengvai įkelti nuotraukas į savo programą - dažnai vienoje kodo eilutėje!

Naudokite „Gradle“:

 implementation 'com.squareup.picasso:picasso:2.71828' 

Tik viena eilutė kodo!

 Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView); 

2. Glide. „Android“ vaizdų įkėlimo ir talpyklos biblioteka orientuota į sklandų slinkimą

Naudokite „Gradle“:

 repositories { mavenCentral() google() } dependencies { implementation 'com.github.bumptech.glide:glide:4.7.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1' } 

// Paprastas vaizdas:

  Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

3. fresco - tai galinga sistema, skirta atvaizdams atvaizduoti „Android“ programose. „Fresco“ prisiima vaizdų įkėlimą ir rodymą, taigi jums nereikia.

Darbo pradžia su „Fresco“

56
22 мая '14 в 9:00 2014-05-22 09:00 Atsakymą pateikė chiragkyada gegužės 22 d. 14 val. 9:00 2014-05-22 09:00

Parašiau pamoką, kuri paaiškina, kaip padaryti, kad sąraše būtų laisvas nuotraukų įkėlimas. Aš išsamiai kalbėsiu apie šalinimo ir sutapimo problemas. Taip pat naudoju fiksuotą siūlų grupę, kad būtų išvengta daugelio siūlų neršto.

Lazingas įkėlimas į vaizdus vaizdui

50
27 авг. Ben Ruijl atsakymas, rugpjūčio 27 d. 2011-08-27 15:54 '11, 15:54, 2011-08-27 15:54

Tai, kaip aš tai darau, yra paleisti srautą, kad galėtumėte įkelti paveikslėlius į foną ir suteikti jai atgalinį ryšį kiekvienam sąrašo elementui. Kai vaizdas yra baigtas, jis skambina atgaliniu ryšiu, kuris atnaujina sąrašo elemento vaizdą.

Šis būdas neveikia gerai, kai peržiūrite peržiūras.

38
12 февр. Atsakymą pateikė jasonhudgins , vasario 12 d. 2009-02-12 23:07 '09, 23:07 2009-02-12 23:07

Aš tiesiog noriu pridėti dar vieną gerą pavyzdį, XML adapterius . Kadangi jį naudoja „Google“, ir taip pat naudoju tą pačią logiką, kad išvengtumėte „OutOfMemory“ klaidos.

Iš esmės šis „ImageDownloader“ yra jūsų atsakymas (nes jis apima daugumą jūsų reikalavimų). Kai kurie iš jų taip pat gali būti įgyvendinami.

30
14 дек. Arslan atsakymą pateikė gruodžio 14 d. 2011-12-14 13:57 '11, 13:57, 2011-12-14 13:57

Naudoju „NetworkImageView“ iš naujos „Android“ tinklinio bibliotekos com.android.volley.toolbox.NetworkImageView , ir atrodo, kad jis veikia labai gerai. Matyt, tai tas pats požiūris, kuris naudojamas „ Google Play“ ir kitose naujose „Google“ programose. Tikrai verta patikrinti.

27
13 июня '13 в 18:17 2013-06-13 18:17 atsakymas droiduojamas birželio 13 d. 13 val. 17:17 2013-06-13 18:17

Tai yra dažna „Android“ problema, kurią daugelis išsprendė daugeliu atvejų. Mano nuomone, geriausias sprendimas, kurį mačiau, yra palyginti nauja biblioteka, vadinama Picasso . Čia pateikiami svarbiausi dalykai:

  • Atvirasis šaltinis, bet virš jo Jake Wharton ActionBarSherlock .
  • Asinchroninis nuotraukų įkėlimas iš tinklo išteklių ar programų, naudojant vieną kodo eilutę
  • Automatinis ListView aptikimas
  • Automatinis diskų ir atminties talpinimas
  • Gali atlikti užsakymą
  • Daug pritaikomų parinkčių
  • Super paprasta API
  • Dažnai atnaujinama
26
16 окт. atsakymas duodamas kaip 16 bal . 2013-10-16 02:22 '13, 2:22, 2013-10-16 02:22

Manau, kad ši problema yra labai populiari tarp „Android“ kūrėjų, ir yra daug tokių bibliotekų, kurios teigia, kad išsprendžia šią problemą, tačiau tik kai kurios iš jų atrodo ant ribos. AQuery yra viena iš šių bibliotekų, tačiau ji yra geresnė nei dauguma jų visais aspektais ir verta pabandyti.

23
11 дек. Atsakymą pateikė Ritesh Kumar Dubey . 2012-12-11 21:33 '12 21:33 2012-12-11 21:33

Na, atsisiuntimo laikas vaizdams iš interneto turi daug sprendimų. Taip pat galite naudoti „ Android“ užklausų biblioteką. Tai suteiks jums visą reikalingą darbą. Įsitikinkite, kad norite tai padaryti ir skaityti wiki bibliotekos puslapį. Ir leisti apriboti vaizdų įkėlimą.

Tai mano kodas:

 @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.row, null); } ImageView imageview = (ImageView) v.findViewById(R.id.icon); AQuery aq = new AQuery(convertView); String imageUrl = "http://www.vikispot.com/z/images/vikispot/android-w.png"; aq.id(imageview).progress(this).image(imageUrl, true, true, 0, 0, new BitmapAjaxCallback() { @Override public void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status) { iv.setImageBitmap(bm); } )); return v; } 

Tai turėtų išspręsti jūsų tinginę pakrovimo problemą.

23
12 февр. Atsakymą pateikė Rahul Rawat 12 vasaris. 2013-02-12 10:10 '13, 10:10, 2013-02-12 10:10

Pažvelkite į „ Shutterbug“ , lengvai naudojamą „SDWebImage“ (mielas „iOS“ biblioteka) „Android“. Jis palaiko asinchroninį talpyklą, saugo blogus URL, atlieka puikų darbą su lygiagrečiai ir apima naudingus poklasius.

Taip pat laukiami prašymai ištraukti (ir klaidų pranešimai)!

19
16 окт. Atsakymas pateikiamas PatrickNLT 16 okt. 2012-10-16 15:43 '12, 15:43, 2012-10-16 15:43

Turėtumėte pabandyti šį universalų parsisiuntimą. Aš naudoju tai po daugelio „RnD“ atlikimo dėl tingaus pakrovimo.

„Universal Image Loader“

Funkcijos

  • Įkelti daugiasukį vaizdą (asinchroninis arba sinchronizavimas)
  • Platus „ImageLoader“ konfigūracijos konfigūravimas (srauto atlikėjai, įkrovos įkroviklis, dekoderis, atminties ir disko talpykla, vaizdo rodymo parametrai ir tt).
  • Daugelis nustatymų kiekvienam skambučiui į rodomą vaizdą (stubeliai, spartinimo jungiklis, dekodavimo parinktys, bitų žemėlapių apdorojimas ir rodymas ir tt).
  • Nuotraukų talpinimas atmintyje ir (arba) diske (įrenginio failų sistema arba SD kortelė)
  • Įkrovos proceso klausymas (įskaitant įkrovos procesą)

„Android 2.0“ palaikymas

2019

17
05 февр. atsakymą pateikė Girish Patel 05 Feb. 2015-02-05 15:45 '15 15:45 2015-02-05 15:45

„DroidParts“ turi „ ImageFetcher“ , kuriai reikia pradėti nulinę konfigūraciją.

  • Naudoja mažiausiai naudojamą diską ir atminties talpyklą (LRU).
  • Efektyviai iššifruoja vaizdus.
  • Palaiko besikeičiančius bitų žemėlapius fono sraute.
  • Paprasta išnyks.
  • Atliekamas atgalinio vaizdo įkėlimo progresas.

Pavyzdžiui, „ DroidPartsGram“ klonas:

2019

16
06 мая '13 в 12:48 2013-05-06 12:48 atsakymas duotas yanchenko 06 gegužės 13 d. 12:48 2013-05-06 12:48

„Novoda“ taip pat turi puikią tingų vaizdų įkėlimo biblioteką ir daugybę programų, pvz., „Songkick“, „Podio“, „SecretDJ“ ir „ImageSearch“, naudoja savo biblioteką.

Jų biblioteka yra čia Github, ir jie turi gana aktyvų klaidų sekimo priemonę . Atrodo, kad jų projektas yra labai aktyvus ir rašydamas šį atsakymą daugiau nei 300 +.

15
12 янв. Atsakymą pateikė Soham sausio 12 d 2013-01-12 14:00 '13 14:00 val. 2013-01-12 14:00

Tiesiog greitas patarimas tiems, kurie dvejoja, kokioje bibliotekoje naudoti tingūs atsisiunčiami vaizdai:

Yra keturi pagrindiniai būdai.

  • DIY => Ne geriausias sprendimas, bet keliems vaizdams, ir jei norite be jokių problemų naudoti kitas bibliotekas

  • Volley Lazy Download Library => Nuo vaikinų iki Android. Tai gerai ir viskas, bet blogai dokumentuota, todėl yra problema.

  • „Picasso“: paprastas sprendimas, kuris tiesiog veikia, netgi galite nurodyti tikslų įvedamo vaizdo dydį. Tai labai paprasta naudoti, tačiau gali būti labai „tobula“ toms programoms, kurios turi susidoroti su daugybe vaizdų.

  • UIL: geriausias būdas tinginiams atsisiųsti vaizdams. Вы можете кэшировать изображения (вам нужно разрешение, конечно), инициализировать загрузчик один раз, а затем выполнить свою работу. Самая зрелая библиотека загрузки асинхронных изображений, которую я когда-либо видел.

15
ответ дан Bijay Koirala 03 авг. '14 в 15:19 2014-08-03 15:19

Проверьте мою вилку LazyList . В основном, я улучшаю LazyList, задерживая вызов ImageView и создавая два метода:

  • Когда вам нужно поставить что-то вроде "Загрузка изображения..."
  • Когда вам нужно показать загруженное изображение.

Я также улучшил ImageLoader, реализовав singleton в этом объекте.

13
ответ дан Nicolas Jafelle 13 февр. '13 в 2:46 2013-02-13 02:46