Skip to content

Instantly share code, notes, and snippets.

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val asyncImageView = findViewById<ImageViewAsync>(R.id.asyncImageView)
asyncImageView.setUrl(
"Some image url"
)
}
var counter = 0
val bitmap = async {
while (counter < 3) {
try {
return@async loadBitmap(url)
} catch (e: Exception) {
e.printStackTrace()
}
counter++
}
val hashMap = ConcurrentHashMap<String, Deferred<Bitmap?>>()
//...
val bitmap = async { loadBitmap(url) }
//...
bitmap?.await()?.let { setImageBitmap(it) }
val hashMap = ConcurrentHashMap<String, Bitmap?>()
job = scope.launch {
val bitmap = if (hashMap.containsKey(url)) {
hashMap[url]
} else {
val bitmap = loadBitmap(url)
if (!hashMap.containsKey(url)) {
hashMap[url] = bitmap
bitmap
private var job: Job? = null
fun setUrl(url: String) {
job?.cancel()
job = scope.launch {
// ...
}
}
private val scope = CoroutineScope(Dispatchers.IO)
fun setUrl(url: String) {
scope.launch {
val bitmap = loadBitmap(url)
withContext(Dispatchers.Main) {
setImageBitmap(bitmap)
}
}
class ImageViewAsync @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : AppCompatImageView(context, attrs, defStyleAttr) {
fun setUrl(url: String) {
val bitmap = loadBitmap(url)
setImageBitmap(bitmap)
}
@AndreVero
AndreVero / elsa_time_picker_16.kt
Created April 10, 2024 10:12
OnItemPicked callback
onItemPicked = {
scope.launch {
rotationAnimation.animateTo(
if (it.isDayTime) 0f else 180f,
defaultSpringSpec
)
}
},
@AndreVero
AndreVero / elsa_time_picker_15.kt
Created April 10, 2024 10:11
Sun and moon component rotation
val defaultSpringSpec = remember {
FloatSpringSpec(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessVeryLow,
)
}
val rotationAnimation = remember {
Animatable(180f)
}
@AndreVero
AndreVero / elsa_time_picker_14.kt
Created April 10, 2024 10:09
Sun and moon composable
@Composable
fun SunMoonComponent(
rotation: Float,
modifier: Modifier = Modifier,
) {
Box(
modifier = modifier
) {
Icon(
painter = painterResource(id = R.drawable.icon_house),