Android ScrollView Button的显示隐藏

来源:互联网 发布:embed js获取播放时间 编辑:程序博客网 时间:2024/06/11 19:51
  • 前言

    之前工作室招新的项目中有用到, 忘记写下来了, 这个东西网上找到的资料不是很多, 所以趁现在记下来,方便以后查阅.

  • 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的高宽、坐标

0 0
原创粉丝点击