皮皮网

【use源码解析】【源码编辑器的函数】【双龙排序优化指标源码】scrollview源码

2024-11-15 06:48:49 来源:鄂州相亲网站源码

1.scrollto和scrollby的区别

scrollview源码

scrollto和scrollby的区别

       ã€€ã€€View类的源代码如下所示,mScrollX记录的是当前View针对屏幕坐标在水平方向上的偏移量,而mScrollY则是记录的时当前View针对屏幕在竖值方向上的偏移量。

       ã€€ã€€ä»Žä»¥ä¸‹ä»£ç å¯ä»¥å¾—知,scrollTo就是把View移动到屏幕的X和Y位置,也就是绝对位置。而scrollBy其实就是调用的scrollTo,但是参数是当前mScrollX和mScrollY加上X和Y的位置,所以ScrollBy调用的是相对于mScrollX和mScrollY的位置。在上面的代码中可以看到当手指不放移动屏幕时,就会调用scrollBy来移动一段相对的距离。而当我们手指松开后,会调用 mScroller.startScroll(mUnboundedScrollX,源码use源码解析 0, delta, 0, duration);来产生一段动画来移动到相应的页面,在这个过程中系统回不断调用computeScroll(),再使用scrollTo来把View移动到当前Scroller所在的绝对位置。

       ã€€ã€€/

**

        * Set the scrolled position of your view. This will cause a call to

        * { @link #onScrollChanged(int, int, int, int)} and the view will be

        * invalidated.

        * @param x the x position to scroll to

        * @param y the y position to scroll to

        */

        public void scrollTo(int x, int y) {

        if (mScrollX != x || mScrollY != y) {

        int oldX = mScrollX;

        int oldY = mScrollY;

        mScrollX = x;

        mScrollY = y;

        invalidateParentCaches();

        onScrollChanged(mScrollX, mScrollY, oldX, oldY);

        if (!awakenScrollBars()) {

        invalidate(true);

        }

        }

        }

        /

**

        * Move the scrolled position of your view. This will cause a call to

        * { @link #onScrollChanged(int, int, int, int)} and the view will be

        * invalidated.

        * @param x the amount of pixels to scroll by horizontally

        * @param y the amount of pixels to scroll by vertically

        */

        public void scrollBy(int x, int y) {

        scrollTo(mScrollX + x, mScrollY + y);

        }