下面列出了android.view.View#setTop ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@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;
}
@Override
public void setLeftTopRightBottom(View v, int left, int top, int right, int bottom) {
v.setLeft(left);
v.setTop(top);
v.setRight(right);
v.setBottom(bottom);
}
@Override
public void set(View object, final Rect value) {
//todo 优化,用setLeftTopRightBottom反射
// ViewUtils.setLeftTopRightBottom(object, mLeft, mTop, mRight, mBottom);
object.setLeft(value.left);
object.setTop(value.top);
object.setRight(value.right);
object.setBottom(value.bottom);
}
private void layout(View header, RecyclerView parent) {
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) header.getLayoutParams();
int left = parent.getPaddingLeft() + params.leftMargin;
int top = parent.getPaddingTop() + params.topMargin;
header.setLeft(left);
header.setRight(left + header.getMeasuredWidth());
header.setTop(top);
header.setBottom(top + header.getMeasuredHeight());
}
/**
* Returns an animator that animates the bounds of a single view.
*/
public static Animator getBoundsAnimator(View view, int fromLeft, int fromTop, int fromRight,
int fromBottom, int toLeft, int toTop, int toRight, int toBottom) {
view.setLeft(fromLeft);
view.setTop(fromTop);
view.setRight(fromRight);
view.setBottom(fromBottom);
return ObjectAnimator.ofPropertyValuesHolder(view,
PropertyValuesHolder.ofInt(VIEW_LEFT, toLeft),
PropertyValuesHolder.ofInt(VIEW_TOP, toTop),
PropertyValuesHolder.ofInt(VIEW_RIGHT, toRight),
PropertyValuesHolder.ofInt(VIEW_BOTTOM, toBottom));
}
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 setValue(View object, int value) {
object.setTop(value);
}
private void translate(View view, int offset) {
view.setTop(view.getTop() + offset);
view.setBottom(view.getBottom() + offset);
}
@Override
public void set(View view, Integer top) {
view.setTop(top);
}
private Animator prepareBoundsAnimator(View child, ChildBounds bounds) {
int startLeft = bounds.start.left;
int startTop = bounds.start.top;
int startRight = bounds.start.right;
int startBottom = bounds.start.bottom;
int endLeft = bounds.end.left;
int endTop = bounds.end.top;
int endRight = bounds.end.right;
int endBottom = bounds.end.bottom;
int changeCount = 0;
if (startLeft != endLeft) {
child.setLeft(startLeft);
changeCount++;
}
if (startTop != endTop) {
child.setTop(startTop);
changeCount++;
}
if (startRight != endRight) {
child.setRight(startRight);
changeCount++;
}
if (startBottom != endBottom) {
child.setBottom(startBottom);
changeCount++;
}
if (changeCount == 0) {
return null;
}
PropertyValuesHolder pvh[] = new PropertyValuesHolder[changeCount];
int pvhIndex = -1;
if (startLeft != endLeft) {
pvh[++pvhIndex] = PropertyValuesHolder.ofInt("left", startLeft, endLeft);
}
if (startTop != endTop) {
pvh[++pvhIndex] = PropertyValuesHolder.ofInt("top", startTop, endTop);
}
if (startRight != endRight) {
pvh[++pvhIndex] = PropertyValuesHolder.ofInt("right", startRight, endRight);
}
if (startBottom != endBottom) {
pvh[++pvhIndex] = PropertyValuesHolder.ofInt("bottom", startBottom, endBottom);
}
return ObjectAnimator.ofPropertyValuesHolder(child, pvh);
}
private Animator prepareBoundsAnimator(View child, ChildBounds bounds) {
int startLeft = bounds.start.left;
int startTop = bounds.start.top;
int startRight = bounds.start.right;
int startBottom = bounds.start.bottom;
int endLeft = bounds.end.left;
int endTop = bounds.end.top;
int endRight = bounds.end.right;
int endBottom = bounds.end.bottom;
int changeCount = 0;
if (startLeft != endLeft) {
child.setLeft(startLeft);
changeCount++;
}
if (startTop != endTop) {
child.setTop(startTop);
changeCount++;
}
if (startRight != endRight) {
child.setRight(startRight);
changeCount++;
}
if (startBottom != endBottom) {
child.setBottom(startBottom);
changeCount++;
}
if (changeCount == 0) {
return null;
}
PropertyValuesHolder pvh[] = new PropertyValuesHolder[changeCount];
int pvhIndex = -1;
if (startLeft != endLeft) {
pvh[++pvhIndex] = PropertyValuesHolder.ofInt("left", startLeft, endLeft);
}
if (startTop != endTop) {
pvh[++pvhIndex] = PropertyValuesHolder.ofInt("top", startTop, endTop);
}
if (startRight != endRight) {
pvh[++pvhIndex] = PropertyValuesHolder.ofInt("right", startRight, endRight);
}
if (startBottom != endBottom) {
pvh[++pvhIndex] = PropertyValuesHolder.ofInt("bottom", startBottom, endBottom);
}
return ObjectAnimator.ofPropertyValuesHolder(child, pvh);
}
public static void reveal(Activity activity, View view, View sourceView, int colorRes) {
if (activity == null || view == null || sourceView == null) return;
if (isLollipop()) {
final ViewGroupOverlay groupOverlay =
(ViewGroupOverlay) activity.getWindow().getDecorView().getOverlay();
final Rect displayRect = new Rect();
view.getGlobalVisibleRect(displayRect);
// Make reveal cover the display and status bar.
final View revealView = new View(activity);
revealView.setTop(displayRect.top);
revealView.setBottom(displayRect.bottom);
revealView.setLeft(displayRect.left);
revealView.setRight(displayRect.right);
revealView.setBackgroundColor(ContextCompat.getColor(activity, colorRes));
groupOverlay.add(revealView);
final int[] clearLocation = new int[2];
sourceView.getLocationInWindow(clearLocation);
clearLocation[0] += sourceView.getWidth() / 2;
clearLocation[1] += sourceView.getHeight() / 2;
final int revealCenterX = clearLocation[0] - revealView.getLeft();
final int revealCenterY = clearLocation[1] - revealView.getTop();
final double x1_2 = Math.pow(revealView.getLeft() - revealCenterX, 2);
final double x2_2 = Math.pow(revealView.getRight() - revealCenterX, 2);
final double y_2 = Math.pow(revealView.getTop() - revealCenterY, 2);
final float revealRadius = (float) Math.max(Math.sqrt(x1_2 + y_2), Math.sqrt(x2_2 + y_2));
try {
final Animator revealAnimator =
ViewAnimationUtils.createCircularReveal(revealView,
revealCenterX, revealCenterY, 0.0f, revealRadius);
revealAnimator.setDuration(
activity.getResources().getInteger(android.R.integer.config_mediumAnimTime));
final Animator alphaAnimator = ObjectAnimator.ofFloat(revealView, View.ALPHA, 0.0f);
alphaAnimator.setDuration(
activity.getResources().getInteger(android.R.integer.config_shortAnimTime));
alphaAnimator.addListener(new AnimatorListenerAdapter() {
@Override public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
view.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.abc_fade_in));
view.setVisibility(View.VISIBLE);
}
});
final AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(revealAnimator).before(alphaAnimator);
animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
animatorSet.addListener(new AnimatorListenerAdapter() {
@Override public void onAnimationEnd(Animator animator) {
groupOverlay.remove(revealView);
}
});
animatorSet.start();
} catch (IllegalStateException e) {
Timber.i("View is detached - not animating");
}
} else {
view.setVisibility(View.VISIBLE);
}
}