滑动的方式

滑动的方式

layout()

@Override
public boolean onTouchEvent(MotionEvent event) {
        //getX()是获取View的坐标
        //获取触摸点的坐标
        float x = event.getX();
        float y = event.getY();
        Log.d(TAG, "onTouchEvent: x = " + x);
        int action = event.getAction();
        switch (action){
            case MotionEvent.ACTION_DOWN:
                lastX = x;
                lastY = y;
                break;
            case MotionEvent.ACTION_MOVE:
                float movedX = x - lastX;
                float movedY = y - lastY;
                Log.d(TAG, "onTouchEvent: lastX = " + lastX);
                Log.d(TAG, "onTouchEvent: movedX = " + movedX);
                layout((int)(getLeft()+movedX),(int)(getTop()+movedY),(int)(getRight()+movedX),(int)(getBottom()+movedY));
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        return true;
}

Params方式

使用Layout的LayoutParams方式

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)getLayoutParams();
layoutParams.leftMargin = (int)(getLeft()+movedX);
layoutParams.topMargin = (int)(getTop()+movedY);
setLayoutParams(layoutParams);

使用MarginLayoutParams的方式

ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams)getLayoutParams();
marginLayoutParams.leftMargin = (int)(getLeft()+movedX);
marginLayoutParams.topMargin = (int)(getTop()+movedY);
setLayoutParams(marginLayoutParams);

使用ScrollBy方式

//ScrollBy方式移动的是View里面的内容,如果要移动View则在它的父布局使用scrollBy
((View)getParent()).scrollBy(-(int)movedX,-(int)movedY);

使用Scroller平滑移动

case MotionEvent.ACTION_UP:
    //使用Scroller平滑移动,手指离开屏幕是View返回原位
    int scrollX = ((View)getParent()).getScrollX();
    int scrollY = ((View)getParent()).getScrollY();
    scroller.startScroll(
        scrollX,
        scrollY,
        -scrollX,
        -scrollY
    );
    invalidate();
    break;

重写computeScroll()方法

    @Override
    public void computeScroll() {
        super.computeScroll();
        if (scroller.computeScrollOffset()){
            ((View)getParent()).scrollTo(
                    scroller.getCurrX(),
                    scroller.getCurrY()
            );
            invalidate();
        }

    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内容是博主照着书敲出来的,博主码字挺辛苦的,转载请注明出处,后序内容陆续会码出。 当了解了Android坐标系和触...
    Blankj阅读 6,696评论 3 61
  • 在Android中想要实现实现滑动有很多方法,这篇博客将提供一些实现滑动的思路,希望可以帮助到有需要的人。 一、A...
    冰鉴IT阅读 14,581评论 11 77
  • 导语 滑动算是Android比较常用的效果了,滑动的操作具有很好的用户体验性。 主要内容 滑动效果是如何产生的 实...
    一个有故事的程序员阅读 6,491评论 3 11
  • 什么是View View 是 Android 中所有控件的基类。 View的位置参数 View 的位置由它的四个顶...
    acc8226阅读 1,222评论 0 7
  • 今天上午的课程是《手机支持的互动课堂》,由华南某信息学院的教授主讲。 上课开始老师就要求我们用手机扫码,扫课室电子...
    楚歌儿阅读 164评论 0 4