Skip to content

Instantly share code, notes, and snippets.

Avatar

Alex Fu alexfu

View GitHub Profile
@alexfu
alexfu / TouchSlopDelegate.kt
Last active Apr 24, 2018
Android TouchSlopDelegate
View TouchSlopDelegate.kt
import android.content.Context
import android.view.MotionEvent
import android.view.MotionEvent.*
import android.view.ViewConfiguration
class TouchSlopDelegate(context: Context) {
private val targetTouchSlop = ViewConfiguration.get(context).scaledTouchSlop
private var touchSlop: Int = 0
private var lastTouchX: Float = 0f
private var lastTouchY: Float = 0f
@alexfu
alexfu / app_build.gradle
Created Nov 30, 2017
Grouping shared dependencies
View app_build.gradle
/**
* This file would be located under /path/to/project/app/build.gradle
*/
apply plugin: 'com.android.application'
android {
// Usual stuff
}
@alexfu
alexfu / Demo.kt
Last active Mar 21, 2019
Making (Android) Spannable great again with Kotlin
View Demo.kt
val world = "World"
val mySpannedText = SpannableString("Hello ${world}!")
mySpannedText.spanWith(world) {
what = BackgroundColorSpan(Color.RED)
flags = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
}
@alexfu
alexfu / StateFrameLayout.java
Last active Dec 25, 2017
A FrameLayout that can show different states one at a time.
View StateFrameLayout.java
/**
* A {@link FrameLayout} that can show different states one at a time.
*/
public class StateFrameLayout extends ViewAnimator {
public static final String STATE_LOADING = "loading";
public static final String STATE_EMPTY = "empty";
public static final String STATE_ERROR = "error";
private static final String STATE_DEFAULT = "default";
private SimpleArrayMap<String, View> stateViewMap;
View keybase.md

Keybase proof

I hereby claim:

  • I am alexfu on github.
  • I am alexfu (https://keybase.io/alexfu) on keybase.
  • I have a public key whose fingerprint is 2AB9 0B76 0A73 7277 00C2 42FB 92A7 CCF0 9D47 5005

To claim this, I am signing this object:

@alexfu
alexfu / UIErrorTextField.swift
Last active May 12, 2016
A UITextField with error text support. Draws error text underneath UITextField.
View UIErrorTextField.swift
import Foundation
import UIKit
class UIErrorTextField : UITextField {
private let bgView = UIView()
private var textFieldHeight = CGFloat(40)
private var errorTextHeight = CGFloat(12)
private let errorTextPadding = CGFloat(2)
var errorFont = UIFont.systemFontOfSize(12) {
@alexfu
alexfu / EqualSpacingItemDecoration.java
Last active Jul 27, 2021
Add equal spacing to RecyclerView items automatically. Can handle horizontal, vertical, and grid display modes
View EqualSpacingItemDecoration.java
import android.graphics.Rect;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class EqualSpacingItemDecoration extends RecyclerView.ItemDecoration {
private final int spacing;
private int displayMode;
public static final int HORIZONTAL = 0;
@alexfu
alexfu / ripple_item_background.xml
Created Jan 12, 2016
v21 checkable selector with ripples
View ripple_item_background.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/mycolor">
<item android:id="@+id/mask">
<color android:color="@android:color/white" />
</item>
</ripple>
View versioning.gradle
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
ext.VersioningPlugin = VersioningPlugin
class VersioningPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.extensions.create("versioning", VersioningPluginExtension)
@alexfu
alexfu / build-gradle-git-hockeyapp.gradle
Last active Aug 29, 2015
Examples of how to streamline releases with your Gradle based Android project
View build-gradle-git-hockeyapp.gradle
/**
* This example demonstrates how to create a build task
* for publishing a beta to HockeyApp in addition to
* tagging and pushing a beta release to your remote git
* repo using the gradle-git plugin.
*/
buildscript {
repositories {
jcenter()