Skip to content

Instantly share code, notes, and snippets.

View alexfu's full-sized avatar

Alex Fu alexfu

View GitHub Profile
@alexfu
alexfu / TouchSlopDelegate.kt
Last active April 24, 2018 02:30
Android TouchSlopDelegate
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 / StateFrameLayout.java
Last active December 25, 2017 23:19
A FrameLayout that can show different states one at a time.
/**
* 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;
@alexfu
alexfu / app_build.gradle
Created November 30, 2017 16:03
Grouping shared dependencies
/**
* This file would be located under /path/to/project/app/build.gradle
*/
apply plugin: 'com.android.application'
android {
// Usual stuff
}
@alexfu
alexfu / MyContextWrapper.java
Last active November 10, 2017 10:49
A ContextWrapper that provides a custom Drawable for overscroll egde and glow. http://alexfu.github.io/blog/2013/12/11/customizing-edgeeffect/
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
import android.util.Log;
/**
@alexfu
alexfu / ProgressLayout.java
Last active October 25, 2017 16:06
A simple FrameLayout that hides/shows an indeterminate ProgressBar over top of your UI
/*
* The MIT License (MIT)
*
* Copyright (c) 2015 Alex Fu
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
@alexfu
alexfu / IsMyActionBarInOverlay.java
Last active October 4, 2017 12:48
Example that shows how to determine if the ActionBar is currently in overlay mode.
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(windowActionBarOverlay()) {
// Do something
}
}

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 18:44
A UITextField with error text support. Draws error text underneath UITextField.
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 / ripple_item_background.xml
Created January 12, 2016 20:07
v21 checkable selector with ripples
<?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>
@alexfu
alexfu / ReversedFrameLayout.java
Last active December 31, 2015 02:09
An attempt at reversing the stack ordering of a simple FrameLayout.
/*
* Copyright (C) 2006 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software