如何让scrollView每次滚动指定的距离,求大神帮忙

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让scrollView每次滚动指定的距离,求大神帮忙相关的知识,希望对你有一定的参考价值。

------解决思路----------------------

scrollview 大神
首先要监听ScrollView中手指触摸的事件并截获该事件,不让ScrollView响应它(即不能滚动)。
判断是向上还是向下滚动,然后手动实现滚动,滚动的距离可以手动设置(如一个childView的高度),可以使用scrollTo(x, y),scrollBy(x, y),smoothScrollBy(dx, dy),smoothScrollTo(dx, dy)方法实现滚动。

请大神帮忙p
scroll

------解决思路----------------------

scrollview
scrollto的方法放在scrollview内部的前端运行 也许能快些

scroll lock

------解决思路----------------------
pager.setOnTouchListener(new View.OnTouchListener()

@Override
public boolean onTouch(View v, MotionEvent event)
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;

);

pager.setOnPageChangeListener(new OnPageChangeListener()

@Override
public void onPageSelected(int arg0)


@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
mPager.getParent().requestDisallowInterceptTouchEvent(true);


@Override
public void onPageScrollStateChanged(int arg0)

);

------解决思路----------------------
因为,如果根据scrollview1的delegate方法设置scrollview2的contentoffset。设置scorllview2的contentoffset时候会调用scrollview2的delegate方法,而scrollview1又要根据scrollview2同步。所以scrollview2的delegate方法又要根据scrollview2的contentoffset设置scrollview1的contentoffset。如此造成了无限循环。我是用了一个“假同步”,首先我在每个scorllview上放了一个uiview,大小是scrollview的contentsize。然后把scrollview的内容放在了那个uiview上。移动其中一个scrollview时,调整另外的scrollview上的uiview的frame即可。

更多相关内容可参考资料http://www.viiboo.cn
参考技术A CGPoint contentOffset = scrollView.contentOffset;
[scrollView setContentOffset:CGPointMake(contentOffset.x + X, contentOffset.y + Y) animated:YES];

其中X和Y分别是x轴和y轴滚动的距离。

祝你愉快,满意请采纳哦
参考技术B 1、ScrollView 的滚动条默认置顶,若想设置它的位置,可以使用mScrollView.smoothScrollTo(x,y)方法,可达到效果。
2、crollTo方法可以调整view的显示位置。在需要的地方调用以下方法即可。
3、scroll表示外层的view,inner表示内层的view,其余内容都在inner里。
注意,方法中开一个新线程是必要的。否则在数据更新导致换行时getMeasuredHeight方法并不是最新的高度。
public static void scrollToBottom(final View scroll, final View inner)
Handler mHandler = new Handler();
mHandler.post(new Runnable()
public void run()
if (scroll == null || inner == null)
return;

int offset = inner.getMeasuredHeight() - scroll.getHeight();
if (offset < 0)
offset = 0;

scroll.scrollTo(0, offset);

);
本回答被提问者采纳

目标 C. ScrollView:每次用户滚动时如何强制它重绘可见部分?

【中文标题】目标 C. ScrollView:每次用户滚动时如何强制它重绘可见部分?【英文标题】:objective c. ScrollView: how to force it redraw visible part each time user scrolls? 【发布时间】:2011-04-02 18:10:19 【问题描述】:

我在滚动视图中有自己的动态变化视图。

由于我的视野很大,我通常只重绘它的可见部分。

但是当我向上或向下滚动时,不会调用 drawRect 方法。

我猜滚动视图有一个缓冲区可以快速响应用户操作,但我不知道它是如何工作的确切机制。


更新

感谢 Wienke,我有一个解决方案:实现 UIScrollViewDelegate。

我已经实现了 scrollViewDidScroll 方法:

-(void) scrollViewDidScroll:(UIScrollView *)sender 
    CGRect visibleRect;
    visibleRect.origin = [scrollView contentOffset];
    visibleRect.size = [scrollView bounds].size;
    [textField setNeedsDisplayInRect:visibleRect];

所以每次用户滚动一点,这个方法都会重绘整个可见部分。不好=(

我怎样才能只重绘...让我称之为“滚动后出现的新区域”。我想它要快得多......

感谢您的关注。

【问题讨论】:

这就是“setNeedsDisplayInRect”的“InRect”部分的用途。您的“visibleRect”变量应该是滚动视图内容视图的边界。 哇...我确信“InRect”正是将传递给drawRect的矩形:方法...。规则#1:永远不要确定-总是检查=)再次感谢 当您使用它时,请查看 Apple 的 View Programming Guide 中的“View Geometry”。您可以将现在发现的内容应用到许多其他情况。 【参考方案1】:

您是否尝试过分配滚动视图委托? UIScrollViewDelegate 协议包括诸如 scrollViewDidEndDragging 之类的方法,您可以在这些方法上重绘。

【讨论】:

我想这会有所帮助,但我正在寻找一种方法来清理滚动视图的缓冲区。 是的!谢谢..您向我展示了正确的挖掘方向=)我使用了 scrollViewDidScroll - 它对我的问题更好。

以上是关于如何让scrollView每次滚动指定的距离,求大神帮忙的主要内容,如果未能解决你的问题,请参考以下文章

js控制滚动条 滚动指定距离

android 实现多textview的滚动

android 怎么让scrollview不能滑动

目标 C. ScrollView:每次用户滚动时如何强制它重绘可见部分?

每次我在 WPF 中加载时如何使 Listbox 的 ScrollViewer 滚动到顶部

如何让ScrollView 的滚动条不显示