How to scroll HorizontalScrollView when a button is clicked in android?

I have a horizontal scrollview in my Android application with Next and Previous buttons. I want to show these buttons only when scollview needs scrolling.ie, the scrollview content is wider than the display width. You also need to hide the previous and next buttons when reaching the first and last elements, respectively. How to the next / previous paragraphs when you click on these buttons?

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mainLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff" >

        <Button
            android:id="@+id/btnPrevoius"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="Previous"
            android:visibility="gone" />

        <HorizontalScrollView
            android:id="@+id/horizontalScrollView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dip"
            android:layout_marginRight="5dip"
            android:layout_toLeftOf="@+id/btnNext"
            android:layout_toRightOf="@+id/btnPrevoius"
            android:fillViewport="true" >

            <LinearLayout
                android:id="@+id/linearLayout1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >
            </LinearLayout>
        </HorizontalScrollView>

        <Button
            android:id="@+id/btnNext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:text="Next"
            android:visibility="gone" />

    </RelativeLayout>

activity

 public class SampleActivity extends Activity {
            private static LinearLayout linearLayout;
            private static HorizontalScrollView horizontalScrollView;
            private static Button btnPrevious;
            private static Button btnNext;
            private static int displayWidth = 0;
            private static int arrowWidth = 0;
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                horizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1);
                linearLayout = (LinearLayout) findViewById(R.id.linearLayout1);
                btnPrevious = (Button) findViewById(R.id.btnPrevoius);
                btnNext = (Button) findViewById(R.id.btnNext);
                for (int i = 0; i < 15; i++) {
                    Button button = new Button(this);
                    button.setTag(i);
                    button.setText("---");
                    linearLayout.addView(button);
                }
                ViewTreeObserver vto = linearLayout.getViewTreeObserver();
                vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

                    @Override
                    public void onGlobalLayout() {
                        ViewTreeObserver obs = linearLayout.getViewTreeObserver();
                        obs.removeGlobalOnLayoutListener(this);
                        Display display = getWindowManager().getDefaultDisplay();
                        displayWidth = display.getWidth();
                        if (linearLayout.getMeasuredWidth() > (displayWidth - 40)) {
                            btnPrevious.setVisibility(View.VISIBLE);
                            btnNext.setVisibility(View.VISIBLE);
                        }
                    }

                });
                btnPrevious.setOnClickListener(listnerLeftArrowButton);
                horizontalScrollView.setOnTouchListener(listenerScrollViewTouch);
            }

            private OnTouchListener listenerScrollViewTouch = new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    showHideViews();
                    return false;
                }
            };

            private OnClickListener listnerLeftArrowButton = new OnClickListener() {

                @Override
                public void onClick(View v) {
                    horizontalScrollView.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, new KeyEvent(0, 0));
                }
            };


        public static void showHideViews() {
            int maxScrollX = horizontalScrollView.getChildAt(0).getMeasuredWidth()- displayWidth;
            Log.e("TestProjectActivity", "scroll X = " +horizontalScrollView.getScrollX() );
            Log.i("TestProjectActivity", "scroll Width = " +horizontalScrollView.getMeasuredWidth() );
            Log.d("TestProjectActivity", "Max scroll X = " + maxScrollX);

            if (horizontalScrollView.getScrollX() == 0) {
                hideLeftArrow();
            } else {
                showLeftArrow();
            }
            if (horizontalScrollView.getScrollX() == maxScrollX) {
                showRightArrow();
            } else {
                //hideRightArrow();
            }
        }

        private static void hideLeftArrow() {
            btnPrevious.setVisibility(View.GONE);
        }

        private static void showLeftArrow() {
            btnPrevious.setVisibility(View.VISIBLE);
        }

        private static void hideRightArrow() {
            btnNext.setVisibility(View.GONE);
        }

        private static void showRightArrow() {
            btnNext.setVisibility(View.VISIBLE);
        }
    }

The value 'maxScrollX'is wrong for me. How to find the maximum scroll value for this? Thanks at Advance

+5
source share
3 answers

, , , .

, HorizontalScrollView. :

1: ListView - ( , - com.yourproject.widgets). , , . (exp. HorizontalListViewAdapter) com.yourproject.widgets.

  • xml ( , ), - :
<com.yourproject.widgets.HorizontalListView
            android:id="@+id/hList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
  • ( ) Activity/Fragment,
HorizontalListView mHList = (HorizontalListView) findViewById (R.id.hList); 
Button bPrevoius = (Button) findViewById (R.id.btnPrevoius);
Button bNext = (Button) findViewById (R.id.btnNext);
  • onClickListeners . scrollTo(), HorizontalListView. , int dp. , () , ():

    bPrevoius.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            //value 500 is arbitrarily given. if you want to achieve 
            //element-by-element scroll you should get the width of the 
            //previous element dynamically or if the elements of the 
            //list have uniform width just put that value instead
             mHList.scrollTo(-500);
            //if it the first/last element you can bPrevoius.setEnabled(false)
    
        }
    });
    
    
    bNext.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            mHList.scrollTo(500);
    
        }
    });
    

2: RecyclerView, Android L ( android: scrollbars = "vertical" , , ListView). .

+4

titanium appcelerator , scrollableView

var scrollableView = Ti.UI.createScrollableView({
            showPagingControl:true,
            scrollingEnabled: true,     
            top: 360                             
});

You can then cycle through all the images or any content that you have and add them to this view.

for (loop) {
  eval ("var view" + i + "= Ti.UI.createView ();");

profile_image = Ti.UI.createImageView({
                image: result[0]['profile_image'],
                left:15,
                width:82,
                height:104,
                top: 0
            });

eval("view"+i+".add(profile_image);");

eval("scrollableView.addView(view"+i+");");

}

mywin.add (scrollableView);

-1
source