Code Monkey home page Code Monkey logo

Comments (3)

colinrtwhite avatar colinrtwhite commented on June 16, 2024

Thanks for the repro project. It looks like this is currently working as expected as you're passing size(Size.ORIGINAL) to the rememberAsyncImagePainter request. This will render the image at the intrinsic dimensions of your SVG, which is width="227" height="80".

If you'd like the SVG to be scaled to the size of the target you can avoid specifying size(Size.ORIGINAL) or pass a custom size (e.g. size(Size(1000, 1000)).

from coil.

OskarPersson avatar OskarPersson commented on June 16, 2024

The problem is that if I remove .size(), the image won't render when put in a Column that is scrollable. I.e. this works:

diff --git a/app/src/main/java/com/oskar/blurry/MainActivity.kt b/app/src/main/java/com/oskar/blurry/MainActivity.kt
index e5d93c3..6a13239 100644
--- a/app/src/main/java/com/oskar/blurry/MainActivity.kt
+++ b/app/src/main/java/com/oskar/blurry/MainActivity.kt
@@ -26,13 +26,11 @@ class MainActivity : ComponentActivity() {
             Column (
                 modifier = Modifier
                     .fillMaxWidth()
-                    .verticalScroll(rememberScrollState())
             ) {
                 val painter = rememberAsyncImagePainter(
                     model = ImageRequest.Builder(LocalContext.current)
                         .data(R.raw.figure)
                         .decoderFactory(SvgDecoder.Factory(useViewBoundsAsIntrinsicSize = false))
-                        .size(Size.ORIGINAL)
                         .build(),
                     imageLoader = ImageLoader.Builder(LocalContext.current)
                         .components {

but this does not:

diff --git a/app/src/main/java/com/oskar/blurry/MainActivity.kt b/app/src/main/java/com/oskar/blurry/MainActivity.kt
index e5d93c3..db0361e 100644
--- a/app/src/main/java/com/oskar/blurry/MainActivity.kt
+++ b/app/src/main/java/com/oskar/blurry/MainActivity.kt
@@ -32,7 +32,6 @@ class MainActivity : ComponentActivity() {
                     model = ImageRequest.Builder(LocalContext.current)
                         .data(R.raw.figure)
                         .decoderFactory(SvgDecoder.Factory(useViewBoundsAsIntrinsicSize = false))
-                        .size(Size.ORIGINAL)
                         .build(),
                     imageLoader = ImageLoader.Builder(LocalContext.current)
                         .components {

size(Size(1000, 1000)) works but feels like a bit of a hack that I would like to avoid. I don't always know if the image is a SVG or something else, like a PNG.

from coil.

colinrtwhite avatar colinrtwhite commented on June 16, 2024

@OskarPersson Yep, unfortunately I don't think there's a better way with rememberAsyncImagePainter. It needs to know what size to decode the image at and it has to rely on Painter.onDraw to determine the canvas size, which seems like it won't be called in this case, which makes the request hang.

AsyncImage avoids this issue by using the composable's constraints, which isn't possible with rememberAsyncImagePainter.

from coil.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.