Skip to content

Instantly share code, notes, and snippets.

View m4kvn's full-sized avatar
🐔
Hahsibiroko Kawai

m4kvn m4kvn

🐔
Hahsibiroko Kawai
View GitHub Profile
@Composable
fun OutlinedText(
text: String,
modifier: Modifier = Modifier,
textStyle: TextStyle = TextStyle.Default,
stroke: Stroke = Stroke(),
strokeColor: Color = Color.Transparent,
) {
var textLayoutResult: TextLayoutResult? by remember {
mutableStateOf(null)
@Composable
fun CompareViewer() {
val density = LocalDensity.current
val separatorWidth: Dp = 1.dp
val separatorWidthPx = with(density) { separatorWidth.toPx() }
BoxWithConstraints(modifier = Modifier.fillMaxWidth()) {
val parentWidthDp = maxWidth
val parentWidthPx = with(density) { parentWidthDp.toPx() }
val initialOffsetX = parentWidthPx / 2
var offsetX by remember { mutableStateOf(initialOffsetX) }
fun Long.toUnits(units: Array<String>): String {
var num = this
var rem = 0L
var index = -1
while ("$num".length > 4 && index < units.lastIndex) {
rem = num % 10000
num /= 10000
index += 1
}
@m4kvn
m4kvn / Extensions.kt
Created February 27, 2021 18:08
FragmentのViewBinding用拡張関数
fun <T : ViewBinding> Fragment.viewBinding(viewBindingFactory: (View) -> T) =
FragmentViewBindingDelegate(this, viewBindingFactory)
class FragmentViewBindingDelegate<T : ViewBinding>(
val fragment: Fragment,
val viewBindingFactory: (View) -> T
) : ReadOnlyProperty<Fragment, T> {
private var binding: T? = null
private val viewLifecycleOwnerObserver = Observer<LifecycleOwner?> {
@m4kvn
m4kvn / Fish.kt
Created February 27, 2021 18:07
あつ森の魚
enum class Fish {
TANAGO {
override val id: Int = 1
override val fishName: String = "タナゴ"
},
OIKAWA {
override val id: Int = 2
override val fishName: String = "オイカワ"
},
FUNA {
@m4kvn
m4kvn / RandomColorKtx.kt
Created November 19, 2020 23:19
AndroidのColorをランダムに生成するスニペット
val randomColor: Int by lazy {
val colorPatterns = arrayOf(
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"
)
Color.parseColor(mutableListOf<String>()
.apply { repeat(6) { add(colorPatterns.random()) } }
.joinToString(separator = "", prefix = "#"))
}
@m4kvn
m4kvn / LabelTextSpan.kt
Created March 13, 2020 07:01
SpannableStringBuilderでテキストをラベル化するときに使うSpan
class LabelTextSpan(
@ColorInt private val labelColorInt: Int,
@ColorInt private val textColorInt: Int,
private val textSize: Float
) : ReplacementSpan() {
override fun draw(
canvas: Canvas,
text: CharSequence?,
start: Int,
@m4kvn
m4kvn / FragmentActivityExt.kt
Created January 29, 2020 04:45
画面をフルスクリーンにするExtension
fun FragmentActivity.fullscreen(flag: Boolean) {
val attrs = window.attributes
attrs.flags = if (flag)
attrs.flags or WindowManager.LayoutParams.FLAG_FULLSCREEN else
attrs.flags or WindowManager.LayoutParams.FLAG_FULLSCREEN
window.attributes = attrs
}
@m4kvn
m4kvn / FontMetricsSpan.kt
Last active March 12, 2020 02:56
FontのMetricsを可視化するため雑につくったReplacementSpan
class FontMetricsSpan : ReplacementSpan() {
override fun draw(
canvas: Canvas,
text: CharSequence?,
start: Int,
end: Int,
x: Float,
top: Int,
y: Int,
@m4kvn
m4kvn / CenteredImageSpan.kt
Created January 9, 2020 01:25
画像を文字のascentとbaselineの中央に配置するImageSpan
class CenteredImageSpan(
context: Context,
resourceId: Int
) : ImageSpan(context, resourceId) {
private val drawableRef = AtomicReference<Drawable?>()
private val cachedDrawable: Drawable
get() = drawableRef.get() ?: drawable.apply {
drawableRef.set(drawable)
}