前言
之前工作室招新的项目中有用到, 忘记写下来了, 这个东西网上找到的资料不是很多, 所以趁现在记下来,方便以后查阅.
NestedScrollView
自定义一个View, 别担心, 不会很复杂.
public class NestedScrollView extends ScrollView { private IOnNestedScrollListener mIOnNestedScrollListener; public NestedScrollView(Context context) { super(context); } public NestedScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public NestedScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * @param l 变化后的x位置 * @param t 变化后的y位置 * @param oldl 原先的x位置 * @param oldt 原先的y位置 */ @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (mIOnNestedScrollListener != null) { if (t > oldt && t - oldt > 15) { //如果是往下滑动,并且大于15的距离, 那么就回调为显示 mIOnNestedScrollListener.onScroll(true); } else if (t < oldt && oldt - t > 15) { mIOnNestedScrollListener.onScroll(false); } } } public void setOnNestedScrollListener(IOnNestedScrollListener onNestedScrollListener) { mIOnNestedScrollListener = onNestedScrollListener; } //创建一个回调接口 public interface IOnNestedScrollListener { void onScroll(boolean isShow); } }
然后我们在Activity里面这样写:
mScDetails.setOnNestedScrollListener(new NestedScrollView.IOnNestedScrollListener() { @Override public void onScroll(boolean isShow) { if (!isShow) { Animator animator = ObjectAnimator.ofFloat(mBtnDetailsJoin, View.Y, mBtnY); animator.setInterpolator(new AccelerateInterpolator()); animator.start(); mBtnDetailsJoin.setEnabled(true); } else { Animator animator = ObjectAnimator.ofFloat(mBtnDetailsJoin, View.Y, mScreenHeight); animator.setInterpolator(new AccelerateInterpolator()); animator.start(); mBtnDetailsJoin.setEnabled(false); } } });
相信你也看出啦, 我这里使用了动画的效果, 这里为什么要设置button的enabled呢, 因为这个动画结束之后, button的位置是改变了, 但是点击原来的地方还是存在点击事件的.
关于如何获取Button的高度和坐标我这里介绍了一种方法, 还需要其它方法的朋友可以看我的另一篇文章. Android 如何获取Button的高宽、坐标
Android ScrollView Button的显示隐藏
最新推荐文章于 2024-07-16 03:31:51 发布