@NonNull private LayoutParams initParams(@NonNull View view, int left, int top) { int[] loc = new int[2]; getLocationOnScreen(loc); final LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); left -= loc[0]; top -= loc[1]; layoutParams.leftMargin = left; layoutParams.topMargin = top; view.setLeft(left); view.setTop(top); if (view.getMeasuredWidth() != 0) { layoutParams.width = view.getMeasuredWidth(); view.setRight(left + layoutParams.width); } if (view.getMeasuredHeight() != 0) { layoutParams.height = view.getMeasuredHeight(); view.setBottom(top + layoutParams.height); } return layoutParams; }
@Test public void getSize_withLayoutParams_notLaidOut_doesCallSizeReady() { view.setLayoutParams(new FrameLayout.LayoutParams(10, 10)); view.setRight(100); view.setBottom(100); target.getSize(cb); verify(cb, times(1)).onSizeReady(anyInt(), anyInt()); }
@Test public void getSize_withLayoutParams_emptyParams_notLaidOutOrLayoutRequested_callsSizeReady() { view.setLayoutParams(new FrameLayout.LayoutParams(0, 0)); view.setRight(100); view.setBottom(100); target.getSize(cb); verify(cb).onSizeReady(100, 100); }
@Test public void getSize_withValidWidthAndHeight_notLaidOut_notLayoutRequested_callsSizeReady() { view.setRight(100); view.setBottom(100); target.getSize(cb); verify(cb).onSizeReady(100, 100); }
private void reposition() { for (int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); if (child.getVisibility() != GONE) { LayoutParams layoutParams = populateLayoutParams(child); child.setLeft(layoutParams.mLeft); child.setTop(layoutParams.mTop); child.setRight(layoutParams.mRight); child.setBottom(layoutParams.mBottom); } } }
private void setViewBounds(final View view, final int width, final int height) { //TODO make this work for all versions view.setLeft(0); view.setRight(0); view.setRight(width); view.setBottom(height); final ViewParent parent = view.getParent(); if (parent != null && ((View) parent).getRight() != 0 && ((View) parent).getBottom() != 0) { setViewBounds(((View) parent), width, height); } } }
@Override public void onAnimationUpdate(ValueAnimator animation) { float progress = (Float) animation.getAnimatedValue(); child.setTranslationY(translationDifference * (1f - progress)); if (oldHeight != newHeight) { float animatedHeight = oldHeight * (1f - progress) + newHeight * progress; child.setBottom(child.getTop() + (int) animatedHeight); } } });
@Override public void onAnimationEnd(Animator animator) { child.setTranslationY(0); child.setBottom(child.getTop() + newHeight); } });
@Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int value = (Integer) animator.getAnimatedValue(); Log.i(TAG, "onAnimationUpdate: value="+value); view.setTop(value); view.setBottom(value+height); } });
private void TopAndBottomOffset(View v, int offset) { int top = v.getTop() + offset; int bottom = v.getBottom(); v.setTop(top); v.setBottom(bottom); }
@Override public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { int reduceChildCount = containerLayout.getChildCount(); View sortChild; int changeViewTagID, sortViewTagID, changeViewPosition, sortViewPosition; for (int i = 0; i < reduceChildCount; i++) { sortChild = containerLayout.getChildAt(i); if (sortChild != changedView) { changeViewTagID = Integer.parseInt(changedView.getTag().toString()); sortViewTagID = Integer.parseInt(sortChild.getTag().toString()); changeViewPosition = preSortPositionArray.get(changeViewTagID); sortViewPosition = preSortPositionArray.get(sortViewTagID); if ((changedView.getTop() > sortChild.getTop() && changeViewPosition < sortViewPosition) || (changedView.getTop() < sortChild.getTop() && changeViewPosition > sortViewPosition)) { sortChild.setTop(changeViewPosition); sortChild.setBottom(changeViewPosition + SIZE_REDUCE_VIEW); preSortPositionArray.put(sortViewTagID, changeViewPosition); preSortPositionArray.put(changeViewTagID, sortViewPosition); resetChildPostion(); break; } } } }
//parent rlOuterView = (SlidingLayout) findViewById(R.id.sl_sliding_view); //child - slides up/down rlAppBarFooter = (RelativeLayout) findViewById(R.id.rl_footer); rlMainView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if( rlOuterView.isMoving() ){ v.setTop(oldTop); v.setBottom(oldBottom); v.setLeft(oldLeft); v.setRight(oldRight); } } });