Android - Scroll/Move the ListView itself

前端 未结 2 1135
广开言路
广开言路 2021-01-21 04:36

I have seen some modern Android and iOS applications where there will be an Image at the top of the page that covers the entire width of the screen. Beneath it, there will be a

相关标签:
2条回答
  • 2021-01-21 05:18

    This is a bit of visual trickery, where it seems as the image and list are one but they are really not.

    basically you have a listview with a headerview the same size as the image and below the listview you have your image so as you scroll it appears the listview is scrolling over the image.

    The layout would look something like this

    <RelativeLayout>
    
        <ImageView></ImageView>
    
        <ListView></ListView>
    
    </RelativeLayout>
    

    The create another layout for the header that is empty with the size of the imageview

    You can also Translate the image in the Y direction when the list scrolls but then you have to hold onto the view globally in your class so you can translate using v.setTranslateY()

    0 讨论(0)
  • 2021-01-21 05:27

    You need to add a header to the listview. You can do it by doing this:

    final View header = LayoutInflater.from(getActivity()).inflate(R.layout.myheader, null);
    ((ListView) getActivity().findViewById(R.id.list)).addHeader(header);
    

    Then you can do the scroll effect by doing this:

        ((ListView) getActivity().findViewById(R.id.list)).setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
    
            }
    
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if (v.getChildCount() > 0 && v.getChildAt(0) != null)
                    header.setTranslationY(Math.round(-v.getChildAt(0).getTop() * 0.5));
            }
        });
    

    Here header is the header of the listview

    0 讨论(0)
提交回复
热议问题