Skip to content

Instantly share code, notes, and snippets.

View ColeMurray's full-sized avatar

Cole Murray ColeMurray

View GitHub Profile
@ColeMurray
ColeMurray / VisibilityTracker.java
Created January 18, 2016 01:31
Inner class used to calculate if a view is visible within it's parent.
static class VisibilityChecker {
private final Rect mClipRect = new Rect();
boolean isVisible(@Nullable final View view, final int minPercentageViewed) {
if (view == null || view.getVisibility() != View.VISIBLE || view.getParent() == null) {
return false;
}
if (!view.getGlobalVisibleRect(mClipRect)) {
@ColeMurray
ColeMurray / VisibilityTracker.java
Last active January 18, 2016 20:36
VisibilityRunnable - A runnable that calls a listener with visible and invisibleViews
class VisibilityRunnable implements Runnable {
private final List<View> mVisibleViews;
private final List<View> mInvisibleViews;
private VisibilityChecker mVisibilityChecker;
VisibilityRunnable() {
mVisibleViews = new ArrayList<>();
mInvisibleViews = new ArrayList<>();
}
@ColeMurray
ColeMurray / VisibilityTracker.java
Last active January 18, 2016 02:32
scheduleVisibilityCheck - A method to place a runnable on a handlers message queue
public class VisibilityTracker {
private static final long VISIBILITY_CHECK_DELAY_MILLIS = 100;
private WeakHashMap<View, TrackingInfo> mTrackedViews = new WeakHashMap<>();
private ViewTreeObserver.OnPreDrawListener mOnPreDrawListener;
private VisibilityTrackerListener mVisibilityTrackerListener;
private boolean mIsVisibilityCheckedScheduled;
private Handler mVisibilityHandler;
private VisibilityChecker mVisibilityChecker;
private Runnable mVisibilityRunnable;
@ColeMurray
ColeMurray / VisibilityTracker.java
Created January 18, 2016 21:28
Added visibilityTrackerListener
public ImpressionAdapter(Activity activity, List<String> dataSet) {
mDataSet = dataSet;
mVisibilityTracker = new VisibilityTracker(activity);
mVisibilityTracker.setVisibilityTrackerListener(new VisibilityTracker.VisibilityTrackerListener() {
@Override
public void onVisibilityChanged(List<View> visibleViews, List<View> invisibleViews) {
handleVisibleViews(visibleViews);
}
});
@ColeMurray
ColeMurray / VisibilityTracker.java
Created January 19, 2016 04:55
Skeleton for VisibilityTracker
public class VisibilityTracker {
private WeakHashMap<View, TrackingInfo> mTrackedViews = new WeakHashMap<>();
private ViewTreeObserver.OnPreDrawListener mOnPreDrawListener;
public interface VisibilityTrackerListener {
void onVisibilityChanged(List<View> visibleViews, List<View> invisibleViews);
}
static class TrackingInfo {
View mRootView;
@ColeMurray
ColeMurray / fragment_main.xml
Created January 19, 2016 05:18
A fragment with a child recycler view
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_floating_material_dark"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivityFragment">
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="240dp"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/title_textview"
@ColeMurray
ColeMurray / ImpressionAdapter.java
Last active January 19, 2016 05:39
Milestone 1 Impression Adapter
public class ImpressionAdapter extends RecyclerView.Adapter<ProductViewHolder> {
private List<String> mDataSet;
public ImpressionAdapter(Activity activity, List<String> dataSet) {
mDataSet = dataSet;
}
@Override
public ProductViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.product_item_layout, viewGroup, false);
public class MainActivityFragment extends Fragment {
private RecyclerView mRecyclerView;
private ArrayList<String> mDataSet = new ArrayList<>();
public MainActivityFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
class VisibilityRunnable implements Runnable {
private final List<View> mVisibleViews;
private final List<View> mInvisibleViews;
private VisibilityChecker mVisibilityChecker;
VisibilityRunnable() {
mVisibleViews = new ArrayList<>();
mInvisibleViews = new ArrayList<>();
}