美文网首页
2.scrollTo与scrollBy

2.scrollTo与scrollBy

作者: crossroads | 来源:发表于2017-03-07 14:24 被阅读173次

前言

根据启舰大大 的博客所学习的滑动删除。

scrollBy子控件在现有位置的基础上一次次移动

scrollBy(int x, int y):子控件往左(上)移动
  • x(y) :为正时,
    布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/activity_main"
    >

    <RelativeLayout
        android:layout_centerInParent="true"
        android:background="@color/colorAccent"
        android:id="@+id/redSection"
        android:layout_width="300dp"
        android:layout_height="300dp"
        >

        <RelativeLayout
            android:layout_centerInParent="true"
            android:id="@+id/greensection"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:background="#00ff00"
           >

            <TextView
                android:layout_centerInParent="true"
                android:id="@+id/txt"
                android:layout_width="100dp"
                android:layout_height="50dp"
                android:gravity="center"
                android:background="@color/colorPrimaryDark"
                android:text="scrollBy"
                android:textSize="20dp"/>
        </RelativeLayout>

    </RelativeLayout>
</RelativeLayout>

点击哪部分,哪部分调用scrollby

        final View root = findViewById(R.id.activity_main);
        final View redSection = findViewById(R.id.redSection);
        final View greenSection = findViewById(R.id.greensection);
        final View txt = findViewById(R.id.txt);
        txt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txt.scrollBy(10, 10);
            }
        });
        greenSection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                greenSection.scrollBy(10, 10);
            }
        });

        redSection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                redSection.scrollBy(10, 10);
            }
        });
        root.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                root.scrollBy(10, 10);
            }
        });

效果如下:


scrollyBy效果图

scrollTo:子控件直接移动到目标位置

将上述代码改为scrollTo

   txt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txt.scrollTo(10, 10);
            }
        });
        greenSection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                greenSection.scrollTo(10, 10);
            }
        });

        redSection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                redSection.scrollTo(10, 10);
            }
        });
        root.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                root.scrollTo(10, 10);
            }
        });

效果如下:

scrollTo效果

做个简易的小左滑,后续会逐渐完善的


代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="horizontal"
    android:id="@+id/itemroot"
    >

    <TextView
        android:id="@+id/item"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@color/colorAccent"
        android:gravity="center"
        android:text="ITEM"
        />
    <TextView
        android:id="@+id/del"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:background="@color/colorPrimaryDark"
        android:gravity="center"
        android:text="删除"
        />
</LinearLayout>
        itemRoot = findViewById(R.id.itemroot);
        del = findViewById(R.id.del);
        del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "删除", Toast.LENGTH_SHORT).show();
            }
        });
        itemRoot.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int scrollX = itemRoot.getScrollX();
                int width = del.getMeasuredWidth();
                if (event.getAction() == MotionEvent.ACTION_MOVE) {
                    //getScrollX()返回的就是子控件相对于初始位置偏移量
                    int newScrollX = (int) (scrollX + lastX - event.getX());
                    if (newScrollX < 0)
                        newScrollX = 0;
                    else if (newScrollX > width) {
                        newScrollX = width;
                    }
                    itemRoot.scrollTo(newScrollX, 0);
                }
                else if (event.getAction() == MotionEvent.ACTION_UP) {
                    if (scrollX > width / 2) {
                        //偏移大于一半距离
                        itemRoot.scrollTo(width, 0);
                    }
                    else
                        //偏移小于一半距离
                        itemRoot.scrollTo(0, 0);
                }
                lastX = (int) event.getX();
                return true;
            }
        });

相关文章

  • 2.scrollTo与scrollBy

    前言 根据启舰大大 的博客所学习的滑动删除。 scrollBy子控件在现有位置的基础上一次次移动 x(y) :为正...

  • Android中ScrollTo与ScrollBy的区别

    Android中ScrollTo与ScrollBy的区别 经过查看源码,ScrollBy方法中通过调用Scroll...

  • View中的scrollTo,scrollBy

    scrollTo,scrollBy: ScrollTo: scrollBy: 其和scrollTo不同的地方在于相...

  • android_Scroller 弹性滑动源码分析

    1、scrollTo/scrollBy 总所周知,使用 View 的 scrollTo 或者 scrollBy 方...

  • view scrollTo 与 scrollBy

    实现view的移动通常有三种方式 1.调用view的scrollTo 或scrollBy2.使用动画来实现3.重置...

  • 【读书笔记】View的滑动

    View的滑动 使用scrollTo/scrollBy 使用scrollTo和scrollBy来实现View的滑动...

  • scrollby

    scrollby(x,y)把内容滚动到指定的像素数,x,y分别代表坐标 表示距原来的位置的距离

  • 3.2 View的滑动

    1.使用 scrollTo/scrollBy scrollBy实际上也是调用了scrollTo方法。scrollB...

  • Android中View的滑动

    使用scrollTo/scrollBy (View中提供的方法) scrollBy实际上也是调用了scrollTo...

  • View的滑动

    1.1、使用scrollTo和scrollBy scrollBy实际上是调用了scrollTo方法,实现了基于当前...

网友评论

      本文标题:2.scrollTo与scrollBy

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