This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class VisibilityRunnable implements Runnable { | |
private final List<View> mVisibleViews; | |
private final List<View> mInvisibleViews; | |
private VisibilityChecker mVisibilityChecker; | |
VisibilityRunnable() { | |
mVisibleViews = new ArrayList<>(); | |
mInvisibleViews = new ArrayList<>(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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"> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class VisibilityRunnable implements Runnable { | |
private final List<View> mVisibleViews; | |
private final List<View> mInvisibleViews; | |
private VisibilityChecker mVisibilityChecker; | |
VisibilityRunnable() { | |
mVisibleViews = new ArrayList<>(); | |
mInvisibleViews = new ArrayList<>(); | |
} |