美文网首页
滑动的方式

滑动的方式

作者: allever | 来源:发表于2018-02-04 10:52 被阅读6次

滑动的方式

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();
        }

    }

相关文章

  • 『与善仁』Appium基础 — 31.滑动方法(一)

    在Appium中提供了三种滑动的方式,swipe滑动、scroll滑动、drag拖拽事件。 除了这三种滑动方式外,...

  • 滑动的方式

    滑动的方式 layout() Params方式 使用Layout的LayoutParams方式 使用MarginL...

  • Flutter中让控件始终处于底部

    1、不可滑动界面的处理方式 方法一: 方法二: 2、可滑动界面的处理方式

  • 弹性滑动

    3.3 弹性滑动 知道了View的滑动,我们还要知道如何实现View的弹性滑动,比较生硬的滑动过去,这种方式的用户...

  • Android View的事件体系(三) 弹性滑动

    弹性滑动 知道了View的滑动,我们还要知道如何实现View的弹性滑动,比较生硬的滑动过去,这种方式的用户体验实在...

  • View的滑动方式

    View的滑动是Android自定义控件的基础,同时在开发中我们也难免会遇到View的滑动处理。其实不管是哪种滑动...

  • Android TV Leanback 简介

    TV 纵向滑动列表介绍 构建滑动列表的几种方式: ListView / RecyclerView 自定义Linea...

  • 滑动冲突处理(一)

    滑动冲突场景:外层横向滑动,内层竖向滑动。这里通过外层拦截的方式来处理冲突。 注意:例子中得布局是ViewGrou...

  • 滑动冲突处理(二)

    滑动冲突场景:外层横向滑动,内层竖向滑动。这里通过内层拦截的方式来处理冲突。 注意:例子中得布局是ViewGrou...

  • View 的滑动学习

    目的 这篇文章主要对 View 的滑动进行学习,主要包括滑动的实现方式和弹性滑动提高用户体验 (一)View 的滑...

网友评论

      本文标题:滑动的方式

      本文链接:https://www.haomeiwen.com/subject/tkhmzxtx.html