安卓view滑动控件及方法scrollBy,scrollTo的使用

来源:互联网 发布:淘宝如何做分销商 编辑:程序博客网 时间:2024/06/05 08:36

在Android View视图是没有边界的,Canvas是没有边界的,只不过我们通过绘制特定的View时对
Canvas对象进行了一定的操作,例如 : translate(平移)、clipRect(剪切)等,以便达到我们的对该Canvas对象绘制的要求 ,我们可以将这种无边界的视图称为“视图坐标”—–它不受物理屏幕限制。通常我们所理解的一个Layout布局文件只是该视
图的显示区域,超过了这个显示区域将不能显示到父视图的区域中 ,对应的,我们可以将这种有边界的视图称为“布局坐标” —— 父视图给子视图分配的布局(layout)大小。
mScrollX: 该视图内容相当于视图起始坐标的偏移量, X轴方向
mScrollY: 该视图内容相当于视图起始坐标的偏移量, Y轴方向
mScrollX 与 mScrollY 代表我们当前偏移的位置
oldX与oldY代表之前的偏移位置

方法:

scrollBy():移动组件滑动位置,会导致onScrollChanged()方法被调用,和视图会被抛弃。在当前视图内容继续偏移(x , y)个单位,显示(可视)区域也跟着偏移(x,y)个单位。
scrollTo():设置组件滑动位置,同上。在当前视图内容偏移至(x , y)坐标处,即显示(可视)区域位于(x , y)坐标处。
调用View的scrollTo()和scrollBy()是用于滑动View中的内容,而不是把某个View的位置进行改变。

例子:

/*这个方法是发生在左右滑动组件,设置其左右边界,使之到达边界时不超过边界,边界值视具体情况而定*/private void handleMove(MotionEvent ev){        final int historySize = ev.getHistorySize();        final int pointerCount = ev.getPointerCount();        float tx = 0,ty = 0;        for(int h=0;h<historySize;h++){            for(int p=0;p<pointerCount;p++){                tx = ev.getHistoricalX(p, h);                ty = ev.getHistoricalY(p, h);                /*使用getScrollX获得当前滚动组件左边的坐标,小于0则超出了左边界,大于?值则超出了右边界/                if(this.getScrollX() < 0) {                    scrollTo(0, 0);                    continue;                }else if(this.getScrollX() > this.getWidth()/3*2) {                    scrollTo(this.getWidth()/3*2,0);                    continue;                }                this.scrollBy((int) (x-tx),0);                x = tx;                y = ty;            }        }        for(int p = 0;p<pointerCount;p++){            tx = ev.getX(p);            ty = ev.getY(p);            if(this.getScrollX() < 0) {                scrollTo(0,0);                continue;            } else if(this.getScrollX() > this.getWidth()) {                scrollTo(this.getWidth(),0);                continue;            }            this.scrollBy((int)(x-tx),0);            x = tx;            y = ty;        }    }
0 0
原创粉丝点击