- 52
- 13 696
Luca Nicoletti
United Kingdom
Приєднався 15 тра 2016
Welcome to my UA-cam channel, I'm Luca, an Android Engineer. I love Android and everything related to it, so much so, I want to teach how we can build applications with it. This led me to speak at conferences all around Europe (hopefully around the world in the future). I talk about Android, tech, and development in general! Join me to stay updated with my latest content.
KMP tutorial pt1: start here! #kmp #kotlin #multiplatform
Here's a first look at how to get started with Kotlin Multiplatform. We're taking a look at what it is, how to create and download a project, and the structure of the project. With small changes to getting started with development.
Time stamps:
00:00 Intro
00:50 What is KMP?
02:12 IDE recommendations
03:45 Project wizard
05:24 Project Structure
07:10 Expect keyword
08:10 Actual keyword
10:00 Compose Multiplatform
10:40 Resources in KMP
13:00 gradle targets and dependencies
13:50 Update to Material3
15:00 Outtro
Want to support the channel?
Buy me a coffee! (Programmers need it)
www.buymeacoffee.com/ZB0OG2T
Time stamps:
00:00 Intro
00:50 What is KMP?
02:12 IDE recommendations
03:45 Project wizard
05:24 Project Structure
07:10 Expect keyword
08:10 Actual keyword
10:00 Compose Multiplatform
10:40 Resources in KMP
13:00 gradle targets and dependencies
13:50 Update to Material3
15:00 Outtro
Want to support the channel?
Buy me a coffee! (Programmers need it)
www.buymeacoffee.com/ZB0OG2T
Переглядів: 118
Відео
My Droidcon Lisbon 2024 speech recording #android #googlemaps
Переглядів 6414 днів тому
Watch the official recording on the @droidconLisbon official channel here: ua-cam.com/video/yGzwrQ5ls-8/v-deo.html Giveaway announcement: ua-cam.com/video/vQJEyXsCQzk/v-deo.html Time stamps: 00:00 Intro 01:34 Recording begins 03:20 Getting started 07:28 Markers 11:02 Clustering 18:10 Shapes (circles, polygons, polylines) 24:36 Overlays (ground, tile) 31:32 Giveaway! 32:05 Outtro Want to support...
200 subs special: Droidcon Italy Giveaway #giveaway #droidconitaly #droidcon
Переглядів 5128 днів тому
Special video to celebrate 200 subscribers! Thanks you all for tuning in and watching my videos, subscribing to the channel! I want to give back to the community somehow, and thought this would be a good idea. If you're planning to attend Droidcon Italy #droiconitaly this year, leave a comment down below and you're in for a chance to win one of 2 50% discounts on the ticket. Best of luck to eve...
Modifier ordering matters in Jetpack Compose #compose #jetpackcompose #google #android
Переглядів 325Місяць тому
In today's video, we're taking a look at how the order of modifiers (applied on a Composable function) affects the end result of that function. Time stamps: 00:00 Intro 00:29 Explanation(s) 00:53 Composition phase 01:12 Layout phase 01:27 Drawing phase 02:17 First example: background padding 03:40 Second example: clip background 05:21 More context 06:00 Third example: corner shadow 07:30 Fourth...
Android Studio LadyBug with Gemini integration #gemini #androidstudio
Переглядів 617Місяць тому
Let's walk through some code refactoring using the new Android Studio Lady Bug Gemini integration Time stamps: 00:00 Intro 00:40 New Gemini capabilities 01:40 First code sample to refactor 04:30 Second code sample to refactor 05:50 Third code sample to refactor 07:30 Composable code sample to refactor 11:31 Conclusions Want to support the channel? Buy me a coffee! (Programmers need it) www.buym...
My droidcon Berlin 24 speech #droidcon #androiddev #speaking #conference #android #jetpackcompose
Переглядів 1552 місяці тому
Sharing on my channel my speech from Droidcon Berlin 2024. Official video link: www.droidcon.com/2024/08/30/how-easy-is-it-to-draw-on-googlemaps-using-compose/ Official droidcon website: www.droidcon.com/ Please head over to their website to watch the content as well! Again thanks to @DroidconDe for hosting such a beautiful event Time stamps: 00:00 Intro 01:20 droidcon Berlin 24 recording 29:40...
Now in Android 109 recap
Переглядів 502 місяці тому
Quick video recap of the latest Now In Android 109 edition: the latest beta for Android 15, new devices coming for Emulation, and tons of new AndroidX releases! Read more: medium.com/androiddevelopers/now-in-android-109-1dbf4e81b127 Early access sign-up form: d.android.com/android-device-streaming/registration Want to support the channel? Buy me a coffee! (Programmers need it) www.buymeacoffee....
What's new in Google Maps Compose: version 6.1.1
Переглядів 1852 місяці тому
A few new versions of Google Maps Compose have been release since I last uploaded a video about them, so in this video I cover what's new, what changed and how to apply the required changes to your project. Time stamps: 00:00 Intro 00:25 Releases overview 00:48 6.1.0 breakdown 01:23 6.1.0 breakdown 01:56 6.1.1 breakdown 02:08 Breaking changes showcase 02:40 Update version 03:28 Solve the breaki...
REST API on Android: part 2: POST APIs, request body and more
Переглядів 1163 місяці тому
This second video about REST APIs in Android covers POST requests, custom header interceptors, and customisable PATHs. The previous video can be found here: ua-cam.com/video/s1JoVlcQ2rg/v-deo.html Time stamps: 00:00 Intro 00:53 Custom path in a GET request 07:20 New endpoint for other REST API types 08:44 New API service endpoints 10:00 Building the UI 16:25 Custom Header Interceptor 19:25 POST...
Network requests on Android: start here! #restapi #netwroking #android #androiddev
Переглядів 1333 місяці тому
In today's video, we're starting a new series: Networking on Android, the basics. Using Retrofit, the most used and well-known library from SquareUp, we're adding networking capabilities to an app, fetching and displaying data from the internet. We set up a project and take a look at `GET` APIs, in the following videos, we'll take a look at authentication, `POST` APIs and more! Time stamps: 00:...
This new Android Studio feature is 🔥
Переглядів 1993 місяці тому
Ciao! Welcome back to my channel. In today's video, we're taking a look at an underrated update of Android Studio Koala that allows us to see two (or more) running devices (emulators) side-by-side inside our Android Studio IDE. The release note went a bit under the hood and was not talked about enough, this new feature is 🔥 Time stamps: 00:00 Intro 01:14 Side-by-side layout in running devices 0...
A glance into your app: Glance Tutorial pt.2, injecting data in your widget #android #jetpackcompose
Переглядів 3213 місяці тому
In my previous video: ua-cam.com/video/jcFYbk8WszQ/v-deo.html I shown you how we can create and customise a Widget using Jetpack Compose thanks to Glance. In this video, we're going deeper into the subject and discover how we can inject useful data into our widgets to avoid using hardcoded data. Time stamps: 00:00 Intro 00:45 Other libraries: Room Hilt 01:25: Question for you 01:45 Initial setu...
Cluster like a pro: add a manager to customise rendering and the algorithm #andorid #androiddev #map
Переглядів 1494 місяці тому
Time stamps: 00:00 Intro 00:46 Setup 02:45 Clustering Composable function 05:28 ClusterManager 07:20 ClusterRenderer 08:08 Customizing the renderer 08:35 Binding renderer and manager 10:00 Click handlers 12:15 Algorithm 12:55 Distance-based algorithm 15:57 Outtro Want to support the channel? Buy me a coffee! (Programmers need it) www.buymeacoffee.com/ZB0OG2T Thanks for watching!
Polygons & Polylines Advanced customisation: punch holes and style with gradiends: GMaps and Compose
Переглядів 1224 місяці тому
Polygons & Polylines Advanced customisation: punch holes and style with gradiends: GMaps and Compose
A glance into your app 👀 Glance Widget Tutorial (Jetpack Compose)
Переглядів 5464 місяці тому
A glance into your app 👀 Glance Widget Tutorial (Jetpack Compose)
Adopting (A) Koala! Enjoy the new features coming with Android Studio Koala
Переглядів 2,2 тис.5 місяців тому
Adopting (A) Koala! Enjoy the new features coming with Android Studio Koala
Planning to become an app developer? Start here: opening a Google Play developer account guide
Переглядів 1615 місяців тому
Planning to become an app developer? Start here: opening a Google Play developer account guide
New in Android & Dev tools: from 40+40 minutes to under 10!
Переглядів 1485 місяців тому
New in Android & Dev tools: from 40 40 minutes to under 10!
The more complex overlay of all: Tile Provider on Google Map - using Jetpack Compose
Переглядів 1986 місяців тому
The more complex overlay of all: Tile Provider on Google Map - using Jetpack Compose
Google IO 2024 Schedule breakdown #google #googleandroid #androiddev #android #androidcommunity
Переглядів 1116 місяців тому
Google IO 2024 Schedule breakdown #google #googleandroid #androiddev #android #androidcommunity
How to migrate your Android project(s) to Version Catalogue
Переглядів 1206 місяців тому
How to migrate your Android project(s) to Version Catalogue
Google Map 🗺️ Challenge: Feature Rebuild 🛠️
Переглядів 1617 місяців тому
Google Map 🗺️ Challenge: Feature Rebuild 🛠️
Mastering Map Magic: Jetpack Compose GroundOverlay Tutorial & Code!
Переглядів 3237 місяців тому
Mastering Map Magic: Jetpack Compose GroundOverlay Tutorial & Code!
Drawing on Google Maps with Jetpack Compose: Circles, Polygons & Polylines
Переглядів 4048 місяців тому
Drawing on Google Maps with Jetpack Compose: Circles, Polygons & Polylines
Now in Android 98 & Jetpack Compose Jan 24 releases! What's coming?
Переглядів 449 місяців тому
Now in Android 98 & Jetpack Compose Jan 24 releases! What's coming?
Amazing tech!
Please post the source code
Currently the source code for this video is in a private repository and can’t be shared.
Tutorial are good, but I can't see your code
You can’t see the code on the screen? Or do you mean you don’t have access to the code? I’m aware in this specific video the screen recording is too small! The latest video tutorial should look better! Please take a look and let me know
@@lucanicoletti on the screen. Screen recording is too small.
@@mirzakorac7455 I see, yes this video was not the best, I got better, let me know if you still can't see the code in my latest videos
@@lucanicoletti Is better now, I'll keep watching
@@mirzakorac7455 Thanks!
Hey Luca, Could you please make a video how to navigate back from a page to previous page, by swiping left to right, current page shifts left to right revealing previous page below? Please, I have been looking for solution but couldn't find.
This is a feature called predictive back, it’s enabled by default on Android 15.
Congrats my friend!
Thanks!
dear sir, ladybug emulator is not working
What build of AS LadyBug are you using? What emulator are you trying to run? What isn’t working?
Very useful stuff, thank you :)
Thank you for watching!
Thanks for the video. No need to use any GlanceStateDefinition at all?
It depends, the video shows how to use a Local Database (with Room). GlanceStateDefinition defaults to `PreferencesGlanceStateDefinition` which uses `PreferenceStore` (the old SharedPreference). It's up to you what you want your Widget to use. If you're just displaying some (simple) user's configuration you could use that, if you're showing data stored in the database of your app, I'd recommend following the tutorial.
Hmm, the layers are stacked as in a photoshop layering just that first modifier is the bottom most layer and then each modifiers are stacked on top like books and last modifier is final. Pad() -> background() = area is reduced due to padding -> and then background is applied to reduced area. background () -> Pad() = background is already merged/drawn and padding reduces area in current layer which is laid on top in a stack fashion…so the text if placed is padded but the background stays intact. But similar to photoshop, the layers are merged into 1 image/ui element before drawing, so if a modifier is overshadowed by another due to sequence then it is simply redundant and can be removed (NOTE: remember about side effects: 1. In background() -> pad(), pad() is redundant or useless, but 2. In background () -> pad() -> text() then pad() is significant for the text layout)
Not always is useless, pad after background can be used to have the content spaced from the outer one, applying the background to everything
Very similar to how it works in SwiftUI, indeed, the background + padding is the simplest example when explaining the topic, good job!
Nice to know since I plan to learn SwiftUI soon!
Buen video, gracias hermano
спасибо очень помог
I thing this is not working if there is already a provideGlance coroutine running. From the docs: Note: update and updateAll do not restart provideGlance if it is already running. As a result, you should load initial data before calling provideContent, and then observe your sources of data within the composition (e. g. androidx. compose. runtime. collectAsState). This ensures that your widget will continue to update while the composition is active. When you update your data source from elsewhere in the app, make sure to call update in case a Worker for this widget is not currently running.
".... intheclosefuture" love it
You never know what happens next! 😂
Hey Luca, Much needed video. Could u please tell how u created custom marker at 12:22 which has text.
Hello, on the screen at 12:22 is a custom implementation of the `clusterItemContent`, which lets you use any `@Composable` as a marker during clustering. If you want to achieve that with Markers alone, you'd need to create a Bitmap (drawing on a Canvas whatever you need), and use the Bitmap as a custom `icon` on the `Marker` composable function. Hope this helps
@@lucanicoletti I am new to Android, do you have repo where I can see code?
@@pawandeepsingh6365 At the moment that repository is not public. I'm happy to send the code over via email for that specific part if necessary.
Cool stuff! Nice summary of your previous videos
Thanks!
Thankyou ❤
Thank to you for watching and supporting the channel!
Hi! Watched all videos “google maps compose”. Thanks for the great content, it’s very helpful. Keep it up!
Thanks, glad you enjoyed them :)
1st...Thanks Luca
Awesome video! I tried to follow your tutorial and it worked but after the user is located, if I move away from the place and press the button again, it does not locate automatically the user (and also remains on the same image and not blank in the middle). How can I implement this feature as in default google maps?
You’d need to subscribe to the position locator via a request, update the camera position and the dot itself through the position received. A bit more complex but totally doable!
Excellent !
Thank you! Glad you enjoyed my content
3rd... Thanks. Would you mind creating a complete app regarding Maps. Thanks in advance
What app would you be interesting in? Several screens with different things inside? One for markers, polygons, circles, polylines, overlays, etc?
@@lucanicoletti Hi Luca, If possible, I’m looking for a simple app with the following functionality: First, I want to search for a place using the Places API and save the results in a ROOM database. Once the saving process is complete, the app should display a main screen with a list of the saved addresses. There should be an option to sort the list in ascending order based on proximity to my current location. Another screen should display connected lines between these places and my current location. This is the basic concept I have in mind.
I see, that goes well beyond a simple tutorial, implies using additional API and a complex project setup, I doubt you’d find any code that does all of that! But that’s the beauty of programming, getting multiple small bits together on your own
hey Luca! thank you for that content! +1 Sub
Thanks! Hope you enjoy all my content 😌
i cant use build config.debug even after adding the dependency
Have you added the `buildFeatures` inside the `android` body? This is not a dependency
@@lucanicoletti yes buildConfig = true is in android body in gradle seting
whenever I try to use buildConfig.DEBUG its showing unresolved reference
Have you rebuilt the project after adding that line?
@@lucanicoletti yes
got stuck cant import androidx.glance.appwidget.components so no Scaffold my references are ok
Never mind. Just got to my catalog and updated all versions including glance to 1.1.0 it showed up
Sorry I missed this comment, glad you found a solution. Yes, Scaffold was introduced in 1.1.0, not from 1.0.0. Let's see what future versions will get us :)
@@lucanicoletti Question is compose and glance a standard in corporate work? I stayed a long time far from coding hard to know what are the standards these days
Compose is for sure. Glance is for building widgets, not many apps have widgets and it’s still restricted compared to the old Widget systems. But a good start point!
Helped a lot. Thanks
Glad it helped
amazing
Thanks ☺️
Bro please teach massive UI
What do you mean by Massive UI?
Hotel booking application, Uber application etc...
This sounds genuinely useful!
It is! You still don’t have embedded emulators on XCode, do you?
@@lucanicoletti I hope we never get them tbh, my confidence in the Xcode team diminishes every year hahaha
👍
if u could add github code link in description, it will be helpful.
Thanks for the comment! Do you mean my code or the links to the official libraries and examples? My code is currently on private repositories
@@lucanicoletti I was talking about your code. I thought it was public. No problem.
Not for now no, mostly because it’s not well thought. As in my latest video I use injection of a repository in an Activity which shouldn’t be done. I don’t want people to get that as an example.
Hi Luca, great video, thanks. Question: clicking on a Cluster or ClusterItem by default shows the InfoWindow and centers the clicked item. But I only need to show the InfoWindow without centering the item. How can I achieve that?
Hi @mariohuizinga1769 , thanks for the reply! Unfortunately there is no way to specify that you want only part of the default click implementation. If you want only one of the two actions to take place, you would need to implement that by yourself inside the onClick listener, and return `false` to prevent the default implementation from happening
@@lucanicoletti You probably mean return `true` to disable default behaviour, I found out that part. But I can't find a way to call `showInfoWindow` in the onClusterItemClick listener, as it only provides the ClusterItem as a parameter. How can I get to the MarkerState of the clicked Marker to call showInfoWindow? Maybe this question is just to complicated as a comment to your video, no problem. I just hoped you might know an easy path.
@@mariohuizinga1769 There is no easy path. My mistake, I meant `true`, correct. You would need to create a view yourself for each marker, and display it when the user taps on the specific marker.
Hey Luca. I have an issue where I have a Google Maps Composable within a Lazy Column, and due to that, I cannot scroll down in the Google Map composable as it causes the entire screen to scroll. Could you cover how to fix this type of issue? it would be greatly appreciated :)
Hey! Thanks for you comment! I'll take a look at this scenario and come back with a solution
@@lucanicoletti Thank you so much 🙏 you provide the best tutorials I have ever seen. Keep it up🗣
Thanks ☺️ I appreciate that
Hey @prod.avarice, I did some research and found this: github.com/googlemaps/android-maps-compose/blob/main/app/src/main/java/com/google/maps/android/compose/MapInColumnActivity.kt The example from the documentation show how to handle this scenario. If you don't find it clear, let me know and I'll create a video for it!
I just discovered you!
Thanks for watching! Hope you enjoy the content 😌
Great video. I'm doing this without jetpack compose. At the moment if my clusterhandleclick uses GoogleMap to add the items it works but if I leave it for the clustermanager to handle when zooming in the contents of the cluster aren't displayed
Thanks for the comment. I don't really understand what you're trying to achieve, and without looking at the code it would be hard for me to diagnose the problem.
Hey thank you for getting back to me!!! I mean like this ( private fun handleClusterClick(cluster: Cluster<MarkerDTO>) { googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(cluster.position, (googleMap.cameraPosition.zoom + 2)), object : GoogleMap.CancelableCallback { override fun onFinish() { cluster.items.forEachIndexed { index, markerDTO -> val offset = calculateOffset(index) val newPosition = LatLng(cluster.position.latitude + offset.first, cluster.position.longitude + offset.second) val markerOptions = MarkerOptions() .position(newPosition) .title(markerDTO.name) .snippet(markerDTO.snippet) .icon(BitmapDescriptorFactory.fromResource(R.drawable.tools_icon)) googleMap.addMarker(markerOptions) } } override fun onCancel() {} }) }) If I don't do googleMap.addMarker and just let the clustermanager handle it, the markers don't show it just zooms into the cluster but won't like uncuster it. I hope this makes sense? by the way I am using xml and the above code is from one of my fragments.
If you already have clusters and markers on your map you don't need to add them again to the map when handling a click. It's all handled for you. Tapping on a cluster will zoom in and display the markers if the zoom is enough to show them.
@@lucanicoletti thanks for replying dude! I just subd to your channel :) I already read that but for some reason when I don't readd them and I click then it just zooms in on the cluster, like it never unclusters it? Another question please if you don't mind, have you managed to work any buttons in the custom info window?
@@hyperfitnz For the first: the markers need to be at a given distance, perhaps 1 step of zoom is not enough to separate them from the cluster. For the second, I haven't try yet, no, did you face any problems?
I expected from that video something else, not a review of what Apple showed on the stage once again :/
I mentioned a few comparisons with what Android has already, and what iOS developers will have to deal with differently (for the icons for example). May I ask what was in your mind?
Thanks for bro, have a nice day
Thank you too
Sticky lines took me a while to get used to in Xcode, only structure headers and method signatures stick, no closing braces
When did they release it on XCode?
@@lucanicoletti ~September 2022, it was probably the single feature xcode had that intellij didn't haha
But it works. It doesn’t properly in AS, for now…
Thank you very much for these Google Maps videos, they helped me a lot!
I’m glad they were useful :)
Really a great help. I am a beginner in Android Studio , I am confused in between kotlin with xml or kotlin with jetpack compose. if u can guide which one should i do, that will be a great help. Thank You So Much. Waiting for your response..
Hey! So the industry is moving to Jetpack Compose and nowadays almost everyone uses it. I would recommend studying it, it’s also more enjoyable to use and easier to grasp!
Great recap!
Thanks!
3rd...Thanks Luca. Looking forward to all of your videos. Cheers !!!
Glad you like them!
May be the hardest, but it's definately the one that creates the best differentiating factor in any app! If you have the resources haha
Always like that: the bigger the struggle, the better the results
Great video !!
Thanks ☺️
Thank you !! Looking forward to more jetpack compose contents, will cont watch this maps series till the end ! I m a beginner so your video about maps really help me so much ❤
Thanks to you for watching! There’s a new one coming out soon! 👀
Had genuinely no idea about this!
You should have seen my face when I found out! 🤨
HI for you next video is it possible to make you screen text with the code bigger!!`?? Thought to follow along.
My latest video should have a bigger font already, give those a try and let me know if that is enough or if I should increase it even more.
Great video
Thanks ☺️
nice thank you
Thank you for watching!
Best thumbnail 😎Very informative video!
Thanks 🙏🏼 tried to be funny on the thumbnail 😂