feat: 图片加载器使用 Sketch

This commit is contained in:
HuanCheng65 2023-01-24 16:37:58 +08:00
parent 4773f41870
commit 87f24ffca0
No known key found for this signature in database
GPG Key ID: E9031EF91A805148
6 changed files with 29 additions and 40 deletions

View File

@ -111,8 +111,6 @@ wire {
dependencies { dependencies {
implementation "com.github.germainkevinbusiness:CollapsingTopBarCompose:1.1.7" implementation "com.github.germainkevinbusiness:CollapsingTopBarCompose:1.1.7"
implementation "io.coil-kt:coil:2.2.2"
implementation "io.coil-kt:coil-compose:2.2.2"
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1' implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1'
// implementation 'androidx.compose.material3:material3:1.0.0' // implementation 'androidx.compose.material3:material3:1.0.0'
@ -145,7 +143,7 @@ dependencies {
implementation "com.google.accompanist:accompanist-swiperefresh:$accompanist_version" implementation "com.google.accompanist:accompanist-swiperefresh:$accompanist_version"
implementation "com.google.accompanist:accompanist-webview:$accompanist_version" implementation "com.google.accompanist:accompanist-webview:$accompanist_version"
def sketch_version = "3.1.0" def sketch_version = "3.2.0-beta01"
implementation "io.github.panpf.sketch3:sketch:$sketch_version" implementation "io.github.panpf.sketch3:sketch:$sketch_version"
implementation "io.github.panpf.sketch3:sketch-compose:$sketch_version" implementation "io.github.panpf.sketch3:sketch-compose:$sketch_version"
implementation "io.github.panpf.sketch3:sketch-extensions:$sketch_version" implementation "io.github.panpf.sketch3:sketch-extensions:$sketch_version"

View File

@ -19,8 +19,9 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage import com.github.panpf.sketch.compose.AsyncImage
import coil.request.ImageRequest import com.github.panpf.sketch.fetch.newResourceUri
import com.github.panpf.sketch.request.DisplayRequest
import com.google.accompanist.drawablepainter.rememberDrawablePainter import com.google.accompanist.drawablepainter.rememberDrawablePainter
import com.google.accompanist.placeholder.PlaceholderHighlight import com.google.accompanist.placeholder.PlaceholderHighlight
import com.google.accompanist.placeholder.material.fade import com.google.accompanist.placeholder.material.fade
@ -83,9 +84,13 @@ fun Avatar(
val context = LocalContext.current val context = LocalContext.current
when (data) { when (data) {
is Int -> { is Int -> {
Image( AsyncImage(
painter = rememberDrawablePainter(drawable = context.getDrawable(data)), request = DisplayRequest(LocalContext.current, newResourceUri(data)) {
placeholder(ImageUtil.getPlaceHolder(context, 0))
crossfade()
},
contentDescription = contentDescription, contentDescription = contentDescription,
contentScale = ContentScale.Crop,
modifier = modifier modifier = modifier
.size(size) .size(size)
.clip(CircleShape), .clip(CircleShape),
@ -104,21 +109,15 @@ fun Avatar(
is String? -> { is String? -> {
AsyncImage( AsyncImage(
model = ImageRequest.Builder(LocalContext.current) request = DisplayRequest(LocalContext.current, data) {
.data(data) placeholder(ImageUtil.getPlaceHolder(context, 0))
.crossfade(true) crossfade()
.build(), },
contentDescription = contentDescription, contentDescription = contentDescription,
placeholder = rememberDrawablePainter( contentScale = ContentScale.Crop,
drawable = ImageUtil.getPlaceHolder(
context,
0
)
),
modifier = modifier modifier = modifier
.size(size) .size(size)
.clip(CircleShape), .clip(CircleShape),
contentScale = ContentScale.Crop
) )
} }

View File

@ -321,8 +321,8 @@ fun FeedCard(
NetworkImage( NetworkImage(
imageUri = media.url, imageUri = media.url,
contentDescription = null, contentDescription = null,
photoViewData = getPhotoViewData(item, index),
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
photoViewData = getPhotoViewData(item, index),
contentScale = ContentScale.Crop contentScale = ContentScale.Crop
) )
} }

View File

@ -8,9 +8,8 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import coil.compose.AsyncImage import com.github.panpf.sketch.compose.AsyncImage
import coil.request.ImageRequest import com.github.panpf.sketch.request.DisplayRequest
import com.google.accompanist.drawablepainter.rememberDrawablePainter
import com.huanchengfly.tieba.post.goToActivity import com.huanchengfly.tieba.post.goToActivity
import com.huanchengfly.tieba.post.models.protos.PhotoViewData import com.huanchengfly.tieba.post.models.protos.PhotoViewData
import com.huanchengfly.tieba.post.ui.page.photoview.PhotoViewActivity import com.huanchengfly.tieba.post.ui.page.photoview.PhotoViewActivity
@ -21,8 +20,8 @@ import com.huanchengfly.tieba.post.utils.ImageUtil
fun NetworkImage( fun NetworkImage(
imageUri: String, imageUri: String,
contentDescription: String?, contentDescription: String?,
photoViewData: PhotoViewData? = null,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
photoViewData: PhotoViewData? = null,
contentScale: ContentScale = ContentScale.Fit, contentScale: ContentScale = ContentScale.Fit,
) { ) {
val context = LocalContext.current val context = LocalContext.current
@ -39,12 +38,11 @@ fun NetworkImage(
} }
} else Modifier } else Modifier
AsyncImage( AsyncImage(
model = ImageRequest.Builder(LocalContext.current) request = DisplayRequest(context, imageUri) {
.data(imageUri) placeholder(ImageUtil.getPlaceHolder(context, 0))
.crossfade(true) crossfade()
.build(), },
contentDescription = contentDescription, contentDescription = contentDescription,
placeholder = rememberDrawablePainter(drawable = ImageUtil.getPlaceHolder(context, 0)),
modifier = modifier.then(clickableModifier), modifier = modifier.then(clickableModifier),
contentScale = contentScale, contentScale = contentScale,
) )

View File

@ -19,9 +19,8 @@ import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
import coil.Coil import com.github.panpf.sketch.request.LoadRequest
import coil.request.ImageRequest import com.github.panpf.sketch.request.LoadResult
import coil.request.SuccessResult
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.huanchengfly.tieba.post.App import com.huanchengfly.tieba.post.App
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
@ -273,15 +272,10 @@ suspend fun requestPinShortcut(
onFailure: (String) -> Unit = {} onFailure: (String) -> Unit = {}
) { ) {
if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) { if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
val request = ImageRequest.Builder(context) val imageResult = LoadRequest(context, iconImageUri).execute()
.data(iconImageUri) if (imageResult is LoadResult.Success) {
.allowHardware(false)
.build()
val imageResult = Coil.imageLoader(context)
.execute(request)
if (imageResult is SuccessResult) {
val shortcutInfo = ShortcutInfoCompat.Builder(context, shortcutId) val shortcutInfo = ShortcutInfoCompat.Builder(context, shortcutId)
.setIcon(IconCompat.createWithBitmap(ImageUtil.drawableToBitmap(imageResult.drawable))) .setIcon(IconCompat.createWithBitmap(imageResult.bitmap))
.setIntent(shortcutIntent) .setIntent(shortcutIntent)
.setShortLabel(label) .setShortLabel(label)
.build() .build()

View File

@ -9,4 +9,4 @@ org.gradle.caching=true
org.gradle.configureondemand=true org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2g -XX:+UseParallelGC -Dfile.encoding=UTF-8 org.gradle.jvmargs=-Xmx2g -XX:+UseParallelGC -Dfile.encoding=UTF-8
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.unsafe.configuration-cache=true # org.gradle.unsafe.configuration-cache=true