Ver código fonte

Added onclick listener for view pager

sirekanyan 8 anos atrás
pai
commit
bc460c9e54

+ 11 - 3
app/src/main/java/me/vadik/knigopis/BookActivity.kt

@@ -7,8 +7,7 @@ import android.support.v4.view.ViewPager
 import android.support.v7.app.AppCompatActivity
 import android.support.v7.widget.Toolbar
 import android.view.View
-import android.view.View.GONE
-import android.view.View.VISIBLE
+import android.view.View.*
 import android.widget.CheckBox
 import android.widget.TextView
 import me.vadik.knigopis.api.BookCoverSearch
@@ -95,7 +94,16 @@ class BookActivity : AppCompatActivity() {
       if (!focus && !editable.isEmpty()) {
         imageSearch.search(editable.toString())
             .subscribe({ urls ->
-              coverViewPager.adapter = CoverPagerAdapter(urls)
+              coverViewPager.visibility = INVISIBLE
+              coverViewPager.adapter = CoverPagerAdapter(urls,
+                  onClick = { position, last ->
+                    coverViewPager.currentItem = if (last) 0 else position + 1
+                  },
+                  onLoaded = { position ->
+                    if (position == 0) {
+                      coverViewPager.visibility = VISIBLE
+                    }
+                  })
             }, {
               logError("cannot load thumbnail", it)
             })

+ 32 - 1
app/src/main/java/me/vadik/knigopis/CoverPagerAdapter.kt

@@ -1,5 +1,6 @@
 package me.vadik.knigopis
 
+import android.graphics.drawable.Drawable
 import android.support.v4.view.PagerAdapter
 import android.view.View
 import android.view.ViewGroup
@@ -7,17 +8,47 @@ import android.view.ViewGroup.LayoutParams
 import android.view.ViewGroup.LayoutParams.*
 import android.widget.ImageView
 import com.bumptech.glide.Glide
+import com.bumptech.glide.load.DataSource
+import com.bumptech.glide.load.engine.GlideException
+import com.bumptech.glide.request.RequestListener
 import com.bumptech.glide.request.RequestOptions
+import com.bumptech.glide.request.target.Target
 
-class CoverPagerAdapter(private val urls: List<String>) : PagerAdapter() {
+class CoverPagerAdapter(
+    private val urls: List<String>,
+    private val onClick: (Int, Boolean) -> Unit,
+    private val onLoaded: (Int) -> Unit
+) : PagerAdapter() {
 
   override fun instantiateItem(container: ViewGroup, position: Int): Any {
     val context = container.context
     val imageView = ImageView(context).apply {
       layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
+      setOnClickListener { onClick(position, position == urls.size - 1) }
     }
     Glide.with(context)
         .load(urls[position])
+        .listener(object : RequestListener<Drawable> {
+          override fun onResourceReady(
+              resource: Drawable?,
+              model: Any?,
+              target: Target<Drawable>?,
+              dataSource: DataSource?,
+              isFirstResource: Boolean
+          ): Boolean {
+            onLoaded(position)
+            return false
+          }
+
+          override fun onLoadFailed(
+              e: GlideException?,
+              model: Any?,
+              target: Target<Drawable>?,
+              isFirstResource: Boolean
+          ): Boolean {
+            return false
+          }
+        })
         .apply(RequestOptions.centerCropTransform())
         .into(imageView)
     container.addView(imageView)