Я пробовал этот метод, чтобы уменьшить масштаб большого изображения до маленького, но все равно не удалось добиться лучшей производительности в lazycolumn, поэтому немногие из вас, ребята, имеют лучшую стратегию, которую вы могли бы обсудить, поэтому вот код декодера.
Код: Выделить всё
class ImageDecoder constructor(
private val sourceResult : SourceResult,
private val options: Options) : Decoder {
@SuppressLint("NewApi")
override suspend fun decode(): DecodeResult = withContext(Dispatchers.IO){
try {
val file = sourceResult.source.file().toFile()
val tempBitmap = bitmapCache.get(file.path)
if(tempBitmap!=null) {
DecodeResult(
drawable = BitmapDrawable(options.context.resources, tempBitmap),
isSampled = false) }
val localBitmap = ThumbnailUtils.createImageThumbnail(file,android.util.Size(200,200),null )
bitmapCache.put(file.path ,localBitmap)
DecodeResult(
drawable = BitmapDrawable(options.context.resources, localBitmap),
isSampled = false)
} catch (e : Exception){
DecodeResult(
drawable = options.context.getDrawable(R.drawable.image_icon)!!,
isSampled = false
) }}
Код: Выделить всё
@HiltAndroidApp
class GalleryApplication : Application() , ImageLoaderFactory , Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
override val workManagerConfiguration: Configuration
get() = Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
override fun newImageLoader(): ImageLoader {
return ImageLoader(this).newBuilder()
.placeholder(R.drawable.placeholder)
.components {
add(com.example.smartgalleryapp.decoder.ImageDecoder.ImageDecoderFactory())
}
.memoryCachePolicy(CachePolicy.ENABLED)
.memoryCache {
MemoryCache.Builder(this)
.maxSizePercent(percent = 0.25)
.strongReferencesEnabled(false)
.build() }
.diskCachePolicy(CachePolicy.ENABLED)
.diskCache {
DiskCache.Builder()
.maxSizePercent(percent = 0.25)
.directory(cacheDir)
.build() }
.logger(DebugLogger()).build() }
Подробнее здесь: https://stackoverflow.com/questions/791 ... il-in-coil