ScrollView使用小结(滑动顶部底部,吸顶,底部加载,滑动停止监听)

ScrollView使用小结(滑动顶部底部,吸顶,底部加载,滑动停止监听)

2023年7月13日发(作者:)

ScrollView使⽤⼩结(滑动顶部底部,吸顶,底部加载,滑动停⽌监听)忙忙碌碌的⼀个多⽉⼜结束了,连续奋战到凌晨四点的两周也成为了过去式....此次上线因为添加了视频直播和点播功能,所以⽐较赶,真是分分钟要猝死的赶脚.不过此次⼜是上线⼜是对旧知识的巩固和对新技术的探究,此次⽤到的ScrollView⽐较多,写⼀篇⽂章⽤以积累.从⾕歌的⽂档我们可以得到ScrollView是⼀个可以滚动的⽤户布局容器,它可以让在⼿机屏幕上展⽰不开的情况下滚动展⽰。ScrollView是⼀个FrameLayout,所以你应该把⼀个⼦控件包含在它的整个内容滚动;这个⼦控件本⾝可以是⼀个复杂的层次结构对象的布局管理器,这个⼦控件⼀般是在垂直⽅向的⼀个LinearLayout呈现,⽤户可以通过滚动的顶级项⽬的垂直阵列。如果⼀个ScrollView有多个布局就会报出以下的错误:error当然,也可以通过below和above让Scrollview在哪两个控件之间滚动,根据⾃⼰的项⽬实时调整.xml中常⽤到的属性:xml中常⽤到的属性:android:fadingEdge="none"设置拉滚动条时 ,边框渐变的⽅向。none(边框颜⾊不变),horizontal(⽔平⽅向颜⾊变淡),vertical(垂直⽅向颜⾊变淡).android:overScrollMode="never"删除ScrollView拉到尽头(顶部、底部),然后继续拉出现的阴影效果,适⽤于2.3及以上的 否则不⽤设置.android:scrollbars="none"设置滚动条显⽰。none(隐藏),horizontal(⽔平),vertical(垂直)。见下列代码演⽰使⽤该属性让EditText内有滚动条。但是其他容器如LinearLayout设置了但是没有效果。android:descendantFocusability=""该属性是当⼀个为view获取焦点时,定义viewGroup和其⼦控件两者之间的关系。属性的值有三种:beforeDescendants:viewgroup会优先其⼦类控件⽽获取到焦点afterDescendants:viewgroup只有当其⼦类控件不需要获取焦点时才获取焦点blocksDescendants:viewgroup会覆盖⼦类控件⽽直接获得焦点ScrollView本⾝的⾼度设置为match_parent,其⼦View的⾼度也设置为match_parent,⾃然状态下该⼦View的⾼度并不会占满ScrollView的⾼度。 原因是match_parent针对⼀般布局⽽⾔,是⼦view的⾼度和parent的⾼度⼀致,但在ScrollView⾝上,⼯作机制并⾮如此,⽽是ScrollView的⾼度随着⼦View的⾼度变化⽽变化(⼦View⾼度⼤于ScrollView时)。在⼦View⾼度⼩于ScrollView⾼度时,必需在xml⾥为ScrollView加上Android:fillViewport="true",这样⼦View⼩于ScrollView⾼度时就会占满⽗View.解决⽅法:xml⾥为ScrollView加上android:fillViewport=“true".ScrollView 中常⽤到的⽅法:Scrollview禁⽌滑动:` ouchListener(new hListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return true; }});可滑动 ouchListener(new hListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return false; }});滚到到底部: (new Runnable() { @Override public void run() { //滑动底部 roll(_DOWN); }});滚动到顶部: (new Runnable() { @Override public void run() { //滑动顶部 roll(_UP); }});滚动到某个位置: (new Runnable() { @Override public void run() { int offset = 100;//偏移值 ScrollTo(0, offset); }});注意:ScrollView 滚动的时候需要post ⼀个runnable,让其在消息队列中执⾏滚动!第⼀,(runnable);并不是新开线程,只是让UI主线程去并发执⾏run()⽅法。第⼆,之所以放在handler⾥,是为了保证View都已经绘制完成。不然,你放在resume()中执⾏,应该也可以的。第三,smoothScrollTo类似于scrollTo,但是滚动的时候是平缓的⽽不是⽴即滚动到某处。另外,smoothScrollTo()⽅法可以打断滑动动画。监听ScrorollView滑动到底部,加载数据:有时候我们想让在ScrollView滑动到底部的时候去做⼀些事情,但是scrollview并没有直接提供这样的⽅法,此时我们可以通过简单的继承⼀下ScrollView,为ScrollView滑动到底部设置⼀下监听:public class ScrollBottomScrollView extends ScrollView {private OnScrollBottomListener listener;private int calCount;public interface OnScrollBottomListener { void scrollToBottom();}public void onScrollViewScrollToBottom(OnScrollBottomListener l) { listener = l;}public void unRegisterOnScrollViewScrollToBottom() { listener = null;}public ScrollBottomScrollView(Context context, AttributeSet attrs) { super(context, attrs);}@Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) { View view = ldAt(0); if (ght() + ollY() == ght()) { calCount++; if (calCount == 1) { if (listener != null) { ToBottom(); } } } else { calCount = 0; }}}在需要的地⽅调⽤如下: llViewScrollToBottom(new llBottomListener() { @Override public void scrollToBottom() { //请求数据 }});另外如果你的布局中是ScrollView嵌⼊RecycerView那么久势必就会出现滑动冲突的问题,此时我们可以把RecycerView的滑动监听给禁⽌,这样就不会有冲突的问题了. LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this) { //禁⽌recycleview竖直滑动 @Overridepublic boolean canScrollVertically() { return false; }};⼤概就⽤到了这么多,以后有新的研究还会继续更新.2019.4.9更新scrollView 嵌套 RecyclerlerViewView 显⽰时会滚动到RecyclerView第⼀项recyclerView⾃动获取了焦点解决:erView去除焦点usableInTouchMode(false);tFocus();2.让scrollView 或者 recyclerView顶端的某个控件获取焦点ll_usableInTouchMode(true);

ll_tFocus();

crollChangeListener() API23以上可⽤问题1.创建⼀个接⼝将ScrollView的滑动⽅法暴露出来,在页⾯中进⾏监听class ScrollBottomScrollView @JvmOverloads constructor( context: Context, attributeSet: AttributeSet? = null, defStyleAttr: Int = 0) : NestedScrollView(context, attributeSet, defStyleAttr) {private var scrollListener: OnScrollChangeListener? = nullinterface OnScrollChangeListener { fun onMScrollChanged(y: Int)}fun onScrollChangeListener(l: OnScrollChangeListener) { scrollListener = l}override fun onScrollChanged(l: Int, t: Int, oldl: Int, oldt: Int) { if (scrollListener != null) { scrollListener!!.onMScrollChanged(t) }}}2.在页⾯中调⽤ scroll_llChangeListener(object :llChangeListener{ override fun onMScrollChanged(y: Int) {

} })Scrollview 滚动某个位置使某个布局吸顶原理很简单,想要Scrollview在滑动过程中,某个部分吸顶,可以写⼀个相同布局的layout并隐藏,然后在scrollview滚动的时候监听滚动到哪个位置让隐藏的layout展⽰出来.show me code :

吸顶逻辑控制 scroll_llChangeListener(object :llChangeListener{ override fun onMScrollChanged(y: Int) { if (y > v_report_) {//滑动距离⼤于v_report_divider的底坐标 layout_hide_lity = E } else { layout_hide_lity = } } })好吧 确实有点简单~~2019.10.14更新ScrollView的滑动跟静⽌监听在业务需求中,有时会遇到需要监听ScrollView实现页⾯的⼀些业务效果主要思路:创建Handler,在ScrollView滑动的时候,先清空所有消息,然后发送延时消息,如果能接收到消息,说明滑动停⽌,下⾯是具体实现的代码public class ObservableScrollView extends NestedScrollView { private OnScrollStatusListener onScrollStatusListener; public ObservableScrollView(Context context) { super(context); } public ObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public ObservableScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { llChanged(l, t, oldl, oldt); if (onScrollStatusListener != null) { lling(); CallbacksAndMessages(null); ptyMessageDelayed(0x01, 200); } } public void setOnScrollStatusListener(OnScrollStatusListener onScrollStatusListener) { llStatusListener = onScrollStatusListener; } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { Message(msg); switch () { case 0x01: if (onScrollStatusListener != null) { llStop(); } break; } } }; @Override protected void onDetachedFromWindow() { chedFromWindow(); CallbacksAndMessages(null); } public interface OnScrollStatusListener { void onScrollStop(); void onScrolling(); }}然后在代码中ObservableScrollView scrollView = findViewById(View); final TextView tvTest = findViewById(_test); crollStatusListener(new llStatusListener() { @Override public void onScrollStop() { t("停⽌滑动"); } @Override public void onScrolling() { t("滑动中"); } });

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689211997a221703.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信