仿微信朋友圈上滑下滑標題顯示

public class MyScrollView extends ScrollView {


    private OnScrollViewListener mOnScrollViewListener;

    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 添加回調接口,便於把滑動事件的數據向外拋
     */
    public interface OnScrollViewListener {
        void onScrollViewListener(int l, int t, int oldl, int oldt);
    }

    /**
     * 註冊回調接口監聽事件
     *
     * @param onScrollViewListener
     */
    public void setOnScrollViewListener(OnScrollViewListener onScrollViewListener) {
        this.mOnScrollViewListener = onScrollViewListener;
    }

    /**
     *
     * @param l    Current horizontal scroll origin. 當前滑動的x軸位置
     * @param t    Current vertical scroll origin. 當前滑動的y軸位置
     * @param oldl Previous horizontal scroll origin. 上一次滑動的x軸位置
     * @param oldt Previous vertical scroll origin. 上一次滑動的y軸位置
     */
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mOnScrollViewListener != null) {
            //將監聽到的數據向外拋
            mOnScrollViewListener.onScrollViewListener(l, t, oldl, oldt);
        }
    }
}

自定義一個scrollView,ide

xml使用注意事項:this

在scrollView中所包裹的必須是LinearLayout,因此務必用LinearLayout對其進行包裹server

使用:xml

my_scroll.setOnScrollViewListener(this);
img_bg.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        mHeight = img_bg.getHeight();
    }
});

設置高度時,需設置ViewTree監聽,防止沒有拿到實際高度接口

/**
 * @param l    Current horizontal scroll origin. 當前滑動的x軸位置
 * @param t    Current vertical scroll origin. 當前滑動的y軸位置
 * @param oldl Previous horizontal scroll origin. 上一次滑動的x軸位置
 * @param oldt Previous vertical scroll origin. 上一次滑動的y軸位置
 */
@Override
public void onScrollViewListener(int l, int t, int oldl, int oldt) {
    if (t <= mHeight) {
        //頂部設置可見性
        title.setVisibility(View.INVISIBLE);
    } else if (t > mHeight && t < (mHeight ) && (t > oldt)) {
        //滑動過程當中,漸變
        Animation animation = new AlphaAnimation(0.1f, 1.0f);
        animation.setDuration(1000);
        animation.setFillAfter(true);
        title.startAnimation(animation);
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                animation.cancel();
                title.clearAnimation();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    } else {
        //過頂部圖區域設置可見性
        title.setVisibility(View.VISIBLE);
        title.setBackgroundColor(Color.BLACK);
    }
}

 

本篇文章參考與 https://www.jianshu.com/p/ec0d4a73c970 小菜鳥一枚,請你們多多指教事件

相關文章
相關標籤/搜索