3

对于我的应用程序,我想启用一个看起来像这样的东西:

<ScrollView>
    <LinearLayout orientation="vertical">
        <FrameLayout layout_height="48dp">
            Anything I want here...
        </FrameLayout>
        <ListView>
            It's size will be set to screen height anyway
        </ListView>
    </LinearLayout>
</ScrollView>

我想这样做,当用户触摸屏幕进行滚动时,起初只有滚动视图滚动,然后,当它到达它的一个边缘时,滚动事件转到列表视图并开始滚动。

我怎样才能做到这一点?

PS 这样做的原因是制作某种隐藏操作栏,当用户向下滚动时,它会从屏幕上滚动出来,然后当他向上滚动时,它应该从底部出现,而不是动画,而是随着列表的移动。因此,如果我将列表滚动到操作栏高度的一半 - 我会在屏幕上看到操作栏的下半部分。你可以在 iOS Google+ 应用程序中看到我的意思。

任何帮助将不胜感激。

4

3 回答 3

4

在布局设置参数

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true" >

      <ListView
                    android:id="@+id/listview"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent">
      </ListView>
</ScrollView>

并在编码部分根据设备高度设置listview的动态高度

    LayoutParams lp = (LayoutParams) list1.getLayoutParams();
    int height = (arraylist.size()) * 80; 

        //arraylist list is in which all data is kept

    lp.height = height;
    listview.setLayoutParams(lp);

    listview.setAdapter(Adapter);
于 2013-09-11T05:02:02.767 回答
0
    setOnScrollListener(new OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                mFirstVisibleItem = firstVisibleItem;
                mLastVisibleItem = firstVisibleItem + visibleItemCount;
                mTotalOfItems = totalItemCount;
            }
});

我这样做是为了知道我在哪里滚动,使用 OnScrollListener 和 OnTouchListener 知道我将滚动到哪里,它对我来说很好......

setOnTouchListener(new OnTouchListener() {

        float oldY = -1;

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:
                oldY = event.getY();
                v.getParent().requestDisallowInterceptTouchEvent(true);
                break;

            case MotionEvent.ACTION_UP:
                v.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            }

            if (oldY > -1 && 
                    (mFirstVisibleItem == 0 && oldY < event.getY()) || 
                    (mLastVisibleItem >= mTotalOfItems && oldY > event.getY())) {
                v.getParent().requestDisallowInterceptTouchEvent(false);
            }

            v.onTouchEvent(event);

            return true;
        }
    });
于 2014-02-04T18:35:20.010 回答
0
*     ListView lv = (ListView)findViewById(R.id.myListView);  
      lv.setOnTouchListener(new ListView.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action) {
            case MotionEvent.ACTION_DOWN:
                // Disallow ScrollView to intercept touch events.
                v.getParent().requestDisallowInterceptTouchEvent(true);
                break;

            case MotionEvent.ACTION_UP:
                // Allow ScrollView to intercept touch events.
                v.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            }

            // Handle ListView touch events.
            v.onTouchEvent(event);
            return true;
        }
    });k;
            }
            // Handle ListView touch events.
            v.onTouchEvent(event);
            return true;
        }
    });*
于 2013-11-01T06:56:24.873 回答