private void showContextMenuFromView( final View openingView, int feedItem, FeedContextMenu.OnFeedContextMenuItemClickListener listener) { if (!isContextMenuShowing) { isContextMenuShowing = true; contextMenuView = new FeedContextMenu(openingView.getContext()); contextMenuView.bindToItem(feedItem); contextMenuView.addOnAttachStateChangeListener(this); contextMenuView.setOnFeedMenuItemClickListener(listener); ((ViewGroup) openingView.getRootView().findViewById(android.R.id.content)) .addView(contextMenuView); contextMenuView .getViewTreeObserver() .addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { contextMenuView.getViewTreeObserver().removeOnPreDrawListener(this); setupContextMenuInitialPosition(openingView); performShowAnimation(); return false; } }); } }
private void performDismissAnimation() { try { contextMenuView.setPivotX(contextMenuView.getWidth() / 2); contextMenuView.setPivotY(contextMenuView.getHeight()); contextMenuView .animate() .scaleX(0.1f) .scaleY(0.1f) .setDuration(150) .setInterpolator(new AccelerateInterpolator()) .setStartDelay(100) .setListener( new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { if (contextMenuView != null) { contextMenuView.dismiss(); } isContextMenuDismissing = false; } }); } catch (Exception ex) { } }
private void setupContextMenuInitialPosition(View openingView) { final int[] openingViewLocation = new int[2]; openingView.getLocationOnScreen(openingViewLocation); int additionalBottomMargin = Utils.dpToPx(16); contextMenuView.setTranslationX(openingViewLocation[0] - additionalBottomMargin * 3); contextMenuView.setTranslationY( openingViewLocation[1] - contextMenuView.getHeight() - additionalBottomMargin); }
private void performShowAnimation() { contextMenuView.setPivotX(contextMenuView.getWidth() / 2); contextMenuView.setPivotY(contextMenuView.getHeight()); contextMenuView.setScaleX(0.1f); contextMenuView.setScaleY(0.1f); contextMenuView .animate() .scaleX(1f) .scaleY(1f) .setDuration(150) .setInterpolator(new OvershootInterpolator()) .setListener( new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { isContextMenuShowing = false; } }); }
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (contextMenuView != null) { hideContextMenu(); contextMenuView.setTranslationY(contextMenuView.getTranslationY() - dy); } }