Scrollview总结:滑动问题监听Scrollview实现头部局改变

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrollview总结:滑动问题监听Scrollview实现头部局改变相关的知识,希望对你有一定的参考价值。

ScrollView就是一个可以滚动的View,这个滚动的方向是垂直方向的,而HorizontalScrollView则是一个水平方向的可以滚动的View。

ScrollView的简单介绍

ScrollView和HorizontalScrollView只是两种滚动方向不同的View而已,其他方面都基本相同,所以下面只单单以ScrollView来介绍。

ScrollView必须有一个确定的高度才能正常工作,因为它实际上所做的就是将一系列不确定高度的子组件装进一个确定高度的容器(通过滚动操作)。

要给一个ScrollView确定一个高度的话,要么直接给它设置高度(不建议),要么确定所有的父容器都已经绑定了高度。

下面来说说我遇到的问题:

一、嵌套listview

因为scrollview嵌套listview会出现冲突

所以我们得自定义Listview

public class MyListViewForScrollView extends ListView{
    public MyListViewForScrollView(Context context) {
        super(context);
    }

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

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

    /**
     * 只需要重写这个方法即可
计算listview最大高度
*/ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }

布局文件

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical">
//这里用我们自定义的listview
    <ky.eyepetizer.com.ky.ListViewForScrollView
        android:id="@+id/lv_hot_author"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ky.eyepetizer.com.ky.ListViewForScrollView>

</RelativeLayout>
</ScrollView>

找控件:

lv_hot_author = (ListViewForScrollView) view.findViewById(R.id.lv_hot_author);

之后使用listview和适配器还是一样的,这里就不做描述了。

二、嵌套GrideViwe同Listview

public class NoScrollGridView extends GridView {
    public NoScrollGridView(Context context) {
        super(context);
    }

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

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

三、scrollview滑动监听例如实现滑动改变头部透明度

首先老规矩自定义scrollview

public class ObservableScrollView extends ScrollView {
  
    private ScrollViewListener scrollViewListener = null;  
  
    public ObservableScrollView(Context context) {
        super(context);  
    }  
  
    public ObservableScrollView(Context context, AttributeSet attrs,
            int defStyle) {  
        super(context, attrs, defStyle);  
    }  
  
    public ObservableScrollView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    public void setScrollViewListener(ScrollViewListener scrollViewListener) {  
        this.scrollViewListener = scrollViewListener;  
    }  
  
    @Override  
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {  
        super.onScrollChanged(x, y, oldx, oldy);  
        if (scrollViewListener != null) {  
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);  
        }  
    }
    public interface ScrollViewListener {

        void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);

    }
}

1.implements ObservableScrollView.ScrollViewListener
2.sv_my = (ObservableScrollView) findViewById(R.id.sv_my);
sv_my.setScrollViewListener(this);
3.计算透明度方法根据需要自定义

@Override
public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {
float alpha = 0;
if (lin_top != null) {
if (y >= UnitSociax.dip2px(context, 100)) {
alpha = 1;
} else {
alpha = y / (UnitSociax.dip2px(context, 100)*1.0f);
}
lin_top.setAlpha(alpha);
}

}

BY 磊磊Tua

 





以上是关于Scrollview总结:滑动问题监听Scrollview实现头部局改变的主要内容,如果未能解决你的问题,请参考以下文章

咸鱼教程EUI多图片滑动组件ScrollView

Android 如何在进入有scrollView的页面时滑动条置顶

android scrollview 嵌套 viewpager 嵌套 gridview 冲突问题

小程序丨怎么获取scroll-view的滑动距离

使用scroll-view横向滚动时,flex布局失效

ScrollView滑动的监听