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

在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值