Android 实战 Gallery 图库

249 阅读1分钟

使用库

Api 接口

使用 pixabay-api 作为数据接口

遇到的问题

解决 imageivew 自适应

在 image 中设置adjustViewBounds属性,使得图像自适应

<ImageView  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:adjustViewBounds="true"  
    android:scaleType="centerCrop" />

解决Fragment 中无法创建 menu 的方法

在 fragment 中 onCreateOptionsMenu 方法创建了menu 但是 menu 并没有显示出来,必须先调用setHasOptionsMenu方法,它才会创建

在 onCreateView 中设置方法

setHasOptionsMenu(true)

瀑布流布局如何在 Adapter 中设置独占一行

ViewHolderS(bind).also { 
    (it.binding.root.layoutParams as StaggeredGridLayoutManager.LayoutParams).isFullSpan = true
}

Glide 监听加载进度

在此项目中需要获得到 Glide 的加载进度用于停止 shimmerLayout 占位动画

Glide.with(binding.root)
    .asBitmap()
    .load(getItem(position).largeImageURL)
    .placeholder(R.drawable.photo_preview_background)
    .listener(object : RequestListener<Bitmap> {
        override fun onLoadFailed(
            e: GlideException?,
            model: Any?,
            target: Target<Bitmap>,
            isFirstResource: Boolean
        ): Boolean {
            //加载失败
            return false
        }

        override fun onResourceReady(
            resource: Bitmap,
            model: Any,
            target: Target<Bitmap>?,
            dataSource: DataSource,
            isFirstResource: Boolean
        ): Boolean {
            //加载成功
            return false.also { binding.shimmerLayout?.stopShimmerAnimation() }
        }
    })
    .into(binding.subsamplingScaleImageView)

未解决的问题

API有限制要求,只能获取多少张图片,当我们获取到定量的图片后,软件并不会给予相关的提示

源码

github: gallery