Android Scrollview : How to detect begin and end o

2019-05-30 19:28发布

问题:

Here is my layout XML. I am adding more rows in a table dynamically.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:myapp="http://schemas.android.com/apk/res/com.tweets"
            android:id="@+id/screen"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:background="#FFFFFF">

    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:id="@+id/main"
                 android:background="#FFFFFF">

        <TableRow android:id="@+id/TableRow01"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content">

            <TextView android:id="@+id/TLocView01"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:textSize="15px"
                      android:textStyle="bold"
                      android:textColor="#000000"
                      android:text="FatWallet Tweets:">
            </TextView>

        </TableRow>
   </TableLayout>
</ScrollView>

I want to implement paging with scrollview. If user tries to scroll backward or forward then i want to make previous page and next page requests. How to do that? Any hint will be appreciated. Thanks.

回答1:

Here is a dirty way to solve that problem

tl = (TableLayout) findViewById(R.id.main);

    tl.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            int y = v.getHeight();
            int y1 = (int) event.getY();

            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                if (y1 + 50 >= y & more) {
                    //System.out.println("ACTION_DOWN " + bpg);
                    more();

                }
                break;
            }

            case MotionEvent.ACTION_UP: {
                if (y1 - 50 <= 100 & bpg > 1) {
                    //System.out.println("ACTION_UP");
                    less();

                }
                break;
            }
            case MotionEvent.ACTION_MOVE: {
                //System.out.println("ACTION_MOVE " + bpg);
                if (y1 - 50 <= 100 & bpg > 1) {
                    //System.out.println("ACTION_UP");
                    less();

                }
                break;
            }
            }

            //System.out.println("Test " + y + "  " + y1);
            return true;
        }
    });

ACTION_DOWN event is handling next page and ACTION_MOVE event is handling previous page. I am checking whether current Y is almost at the end or at the beginning then only act. It is not clean but one way to make it work.