Skip to content

Instantly share code, notes, and snippets.

View justasm's full-sized avatar

Justas Medeišis justasm

View GitHub Profile
@justasm
justasm / VideoPlaybackActivity.java
Created August 21, 2014 15:45
Android video playback - using VideoView to play file from res/raw/ & MediaController for playback control.
package com.example.videotest;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
public class VideoPlaybackActivity extends Activity {
@justasm
justasm / VTKLoader.java
Created February 21, 2016 21:17
Legacy VTK file loader. Decodes POLYDATA datasets from binary or ASCII VTK files to vertex, index and normal float buffers.
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;
import java.util.ArrayList;
@justasm
justasm / CircleTransformation.java
Created August 15, 2016 19:34
Picasso CircleTransformation
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import com.squareup.picasso.Transformation;
public class CircleTransformation implements Transformation {
@justasm
justasm / LazyMutable.kt
Created August 8, 2017 08:39
Kotlin Lazy for mutable values
@file:Suppress("RedundantVisibilityModifier", "NOTHING_TO_INLINE")
import kotlin.reflect.KProperty
public interface LazyMutable<T> {
public var value: T
public fun isInitialized(): Boolean
}
public inline operator fun <T> LazyMutable<T>.getValue(thisRef: Any?, property: KProperty<*>): T {
@justasm
justasm / LayoutExtensions.kt
Last active November 4, 2017 00:28
Android View Kotlin extension for a one-shot callback after layout
fun View.afterLayout(block: View.() -> Unit) {
val originalVto = viewTreeObserver
originalVto.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
if (originalVto.isAlive) originalVto.removeOnPreDrawListener(this)
viewTreeObserver.removeOnPreDrawListener(this)
block(this@afterLayout)
return true
}
})
@justasm
justasm / CenterVerticalDrawableSpan.kt
Created June 19, 2018 00:34
Image / drawable span that is vertically centered relative to its surrounding text
private abstract class CenterVerticalDrawableSpan : ReplacementSpan() {
abstract fun getDrawable(): Drawable?
private var drawableRef: WeakReference<Drawable>? = null
private val cachedDrawable: Drawable?
get() = drawableRef?.get() ?: getDrawable()?.also { drawableRef = WeakReference(it) }
override fun getSize(paint: Paint, text: CharSequence,
@justasm
justasm / AndroidDebounced.kt
Last active August 22, 2018 12:23
Debounced property delegate Android implementation
import android.os.Handler
fun <T> debounced(initialValue: T, debounceMs: Long = 500L): Debounced<T> {
return AndroidDebounced(initialValue, debounceMs)
}
private class AndroidDebounced<T>(initialValue: T, private val debounceMs: Long) : Debounced<T> {
private val handler = Handler()
private var _value: T = initialValue
@justasm
justasm / MultiTouchView.java
Last active October 17, 2018 12:41
Android multitouch - tracking individual pointers (fingers) across space and time.
package com.example.multitouch;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
@justasm
justasm / MaskImageView.java
Created September 1, 2014 17:14
Android image compositing - masking Bitmap with another Bitmap.
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;
@justasm
justasm / NonPersistentCookieJar.java
Last active April 21, 2019 10:03
OkHttp 3 non-persistent CookieJar with an ACCEPT_ALL policy
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.HttpUrl;