How I can create vertical gallery in Android?

こ雲淡風輕ζ 提交于 2019-12-18 18:07:15

问题


I want to create a widget that behaves similar to the gallery widget but scrolls vertically instead of horizontally. That is images in gallery should be vertically placed on screen and can be scroll vertically.Does anybody help me please?


回答1:


Assume that you want to have a single column of images and want to scroll vertically. Check the following example

   <GridView android:id="@+id/gridView1" 
    android:layout_width="70dp"  android:layout_height="fill_parent"
    android:verticalSpacing="2dp"   android:numColumns="1" 
    android:stretchMode="columnWidth" android:layout_marginLeft="1dp"
    android:layout_alignParentTop="true"  android:scrollingCache="true"
    android:scrollbars="vertical" android:fadeScrollbars="false"
    android:scrollbarAlwaysDrawVerticalTrack="true">
</GridView>



回答2:


I've managed to create a simple solution using a ListView, and scrolling it to the closest position when the scroll is stopped. Simply create a ListView and add this OnScrollListener:

EDIT: I've updated the code to a better implementation

lv.setOnScrollListener(new OnScrollListener(){

        private boolean handleScrollChange = true;

        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
          }

       public void onScrollStateChanged(final AbsListView view, int scrollState) {
            if (!handleScrollChange)
                return;
            if(scrollState == OnScrollListener.SCROLL_STATE_IDLE){
                View centerView;
                if (view.getLastVisiblePosition() - view.getFirstVisiblePosition() > 1) { //if shows more than 2 items, display the middle one
                    centerView = view.getChildAt( Math.round((view.getChildCount())/2));
                }
                else { //shows 2 items, check which one is closer to the middle
                    View bottomview = view.getChildAt(view.getChildCount()-1); 
                    if (bottomview.getTop() < bottomview.getHeight() / 2) {
                        centerView = bottomview;
                    }
                    else {
                        centerView = view.getChildAt(0);
                    }
                }

                int wantedOffset = (view.getHeight() - centerView.getHeight()) / 2 ;
                final int scrollby = (int) centerView.getY() - wantedOffset;
                //we want to prevent the smoothScroll from calling this function again
                handleScrollChange = false;

                view.post(new Runnable() {
                    @Override
                    public void run() {
                        view.smoothScrollBy(scrollby,300);
                        view.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                handleScrollChange = true;
                            }
                        }, 1000);
                    }
                });
            }
          }
        });



回答3:


You have to extend the Gallery class and in the Draw procedure rotate the canvas for 90 degrees. Then just a few adoptions like modifying the onTouch event and a few more is required. After this there will be a few problems with the layout (since it still wants to draw in the layout in its parameters). So I put it inside a LinearLayout and fixed the layout size in that.
So the final vertical gallery is actually a linear layout which has a gallery put inside it. I have implemented it, and it works quite well. You will only need to rotate everything you put in it for 90 degrees to the other direction. The trade off is really a little thus you can extend every view you want to put inside it and just rotate it to the other direction in the draw procedure.



来源:https://stackoverflow.com/questions/4639958/how-i-can-create-vertical-gallery-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!