Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView内部滚动视图魔术_Android_Android Listview_Touch_Android Actionbar_Android Scrollview - Fatal编程技术网

Android ListView内部滚动视图魔术

Android ListView内部滚动视图魔术,android,android-listview,touch,android-actionbar,android-scrollview,Android,Android Listview,Touch,Android Actionbar,Android Scrollview,对于我的应用程序,我想启用一个类似以下内容的东西: <ScrollView> <LinearLayout orientation="vertical"> <FrameLayout layout_height="48dp"> Anything I want here... </FrameLayout> <ListView> It's s

对于我的应用程序,我想启用一个类似以下内容的东西:

<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>

我想要的任何东西。。。
它的大小将设置为屏幕高度
我想这样做,当用户触摸屏幕滚动时,首先只有scrollview滚动,然后,当它到达一个边缘时,滚动事件转到listview并开始滚动

我怎样才能做到这一点

另外,这样做的原因是为了制作某种隐藏的actionbar,当用户深入屏幕时,它会从屏幕上滚动,然后当用户向上滚动时,它会从底部显示,而不是动画,而是当列表移动时。因此,如果我将列表滚动到操作栏高度的一半,我会在屏幕上看到操作栏的下半部分。 你可以在iOS Google+应用程序中看到我的意思


任何帮助都将不胜感激。

在Layaout设置参数中

 <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>
我这样做是为了知道我在哪里滚动,使用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;
        }
    });
setOnTouchListener(新的OnTouchListener(){
float oldY=-1;
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
oldY=event.getY();
v、 getParent().RequestDisallowWinterCeptTouchEvent(true);
打破
case MotionEvent.ACTION\u UP:
v、 getParent().RequestDisallowWinterCeptTouchEvent(false);
打破
}
如果(旧的>-1&&
(mFirstVisibleItem==0&&oldY=mTotalOfItems&&oldY>event.getY()){
v、 getParent().RequestDisallowWinterCeptTouchEvent(false);
}
v、 事件;
返回true;
}
});

表示您在scrollview中遇到了listview的滚动问题?
*     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;
        }
    });*
    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;
            }
});
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;
        }
    });