Skip to content

Commit 0db17e6

Browse files
committed
cloud storage post published and glide updated
1 parent 796c186 commit 0db17e6

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

_drafts/2019-06-17-glide.md

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ image: libraries/glide
77
github: libraries/tree/master/glide
88
description: "Biblioteki"
99
version: Glide 4.9
10-
keywords: "glide, image, imageview, bitmap, network, resources, memory, cache, disk, loader, imageloader, gif, transition, transformation, android, programowanie, programming"
10+
keywords: "glide, image, imageview, bitmap, network, resources, memory, cache, disk, loader, imageloader, gif, transition, transformation, glideapp, glidemodule, glideextension, glideoption, glidetype, recyclerview, android, programowanie, programming"
1111
---
1212

1313
## Wstęp
@@ -208,4 +208,81 @@ private fun loadImageByCustomModule() {
208208
.smallCircle() //new custom option
209209
.into(imageView)
210210
}
211+
{% endhighlight %}
212+
213+
## RecyclerView
214+
Glide ułatwia współpracę z `RecyclerView` (obrazy są ładowane wcześniej zgodnie z kierunkiem przesuwania) poprzez użycie `RecyclerViewPreloader` jako obiektu słuchacza dla akcji przesuwania `addOnScrollListener`. W połączeniu z odpowiednim rozmiarem obrazu i optymalną strategią pamięci pozwala na zmniejszenie liczby ładowanych obrazów dostarczając je wcześniej.
215+
216+
{% highlight kotlin %}
217+
//usage of RecyclerViewPreloader in RecyclerView
218+
class RecyclerViewActivity : AppCompatActivity() {
219+
220+
private lateinit var recyclerView: RecyclerView
221+
private lateinit var preloader: RecyclerViewPreloader<Any>
222+
private val urls = listOf("url1", "url2", "url3") //mock some url
223+
224+
override fun onCreate(savedInstanceState: Bundle?) {
225+
super.onCreate(savedInstanceState)
226+
setContentView(R.layout.activity_recyclerView)
227+
228+
initPreloader()
229+
initRecyclerView()
230+
}
231+
232+
private fun initPreloader() {
233+
val size = 100
234+
val maxPreload = 10
235+
val sizeProvider: ListPreloader.PreloadSizeProvider<Any> = FixedPreloadSizeProvider(size, size)
236+
val modelProvider = CustomPreloadModelProvider(urls, this) //own implementation of PreloadModelProvider
237+
preloader = RecyclerViewPreloader(this, modelProvider, sizeProvider, maxPreload)
238+
}
239+
240+
private fun initRecyclerView() {
241+
recyclerView = findViewById(R.id.recyclerView)
242+
recyclerView.apply {
243+
layoutManager = LinearLayoutManager(this@MainActivity)
244+
adapter = CustomAdapter(urls, this@MainActivity)
245+
addOnScrollListener(preloader) //set RecyclerViewPreloader as scroll listener
246+
}
247+
}
248+
}
249+
250+
//implement PreloadModelProvider
251+
class CustomPreloadModelProvider(val urls: List<String>, val context: Context) : ListPreloader.PreloadModelProvider<Any> {
252+
253+
override fun getPreloadItems(position: Int): MutableList<Any> {
254+
val url = urls[position]
255+
if (TextUtils.isEmpty(url)) {
256+
return Collections.emptyList()
257+
}
258+
return Collections.singletonList(url)
259+
}
260+
261+
override fun getPreloadRequestBuilder(item: Any): RequestBuilder<*>? {
262+
return GlideApp.with(context).load(item)
263+
}
264+
}
265+
266+
//just simple adapter
267+
class CustomAdapter(val urls: List<String>, val context: Context) : RecyclerView.Adapter<CustomAdapter.CustomViewHolder>() {
268+
269+
class CustomViewHolder(view: View) : RecyclerView.ViewHolder(view) {
270+
val imageView: ImageView
271+
init {
272+
imageView = view.findViewById(R.id.imageView)
273+
}
274+
}
275+
276+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
277+
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
278+
return CustomViewHolder(view)
279+
}
280+
281+
override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
282+
//set some data on item
283+
GlideApp.with(context).load(urls[position]).into(holder.imageView) //standard Glide loading
284+
}
285+
286+
override fun getItemCount(): Int = urls.size
287+
}
211288
{% endhighlight %}
File renamed without changes.

0 commit comments

Comments
 (0)