Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show more in Horizontal ScrollView in android

I am not sure what will be the best title, but with picture, it will be clear what I want.

I have implemented Horizontal Scrollview, I have made it custom, in that only four items will be displayed and if user want to see fifth item, then he has to scroll it. I have successfully done it.

But in android 2.3.3 it is showing white view at the end when there is more items, whereas in android 4.0 it is not showing. See the image below:

enter image description here

Look here in android 2.3, I am showing white view which clearly telling me that, there is more buttons, but the same result I am not getting in android 4.0 or above.
Can anybody help me how to display it.

like image 505
Siddhpura Amit Avatar asked Dec 23 '13 12:12

Siddhpura Amit


People also ask

What is nested scroll view?

NestedScrollView is just like ScrollView , but it supports acting as both a nested scrolling parent and child on both new and old versions of Android. Nested scrolling is enabled by default.

What is the difference between ScrollView and horizontal ScrollView?

A ScrollView supports Vertical scrolling only, so in order to create a horizontally scrollable view, HorizontalScrollView is used.

How many views can you use within a ScrollView?

ScrollView is a subclass of FrameLayout , which means that you can place only one View as a child within it; that child contains the entire contents to scroll.


1 Answers

You can easily replicate that behavior by extending the HorizontalScrollView widget and drawing two properly placed images/drawables:

public class CustomHorizontalScrollView extends HorizontalScrollView {

    private static final int SHADOW_WIDTH = 35;
    private GradientDrawable mDrawableLeft;
    private GradientDrawable mDrawableRight;
    private Rect mBounds = new Rect();

    public CustomHorizontalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mDrawableLeft = new GradientDrawable(Orientation.LEFT_RIGHT,
                new int[] { Color.GRAY, Color.TRANSPARENT });
        mDrawableRight = new GradientDrawable(Orientation.RIGHT_LEFT,
                new int[] { Color.GRAY, Color.TRANSPARENT });
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
        // the scroll value
        final int offset = this.getScrollX();
        mBounds.setEmpty();
        mBounds.bottom = getMeasuredHeight();
        // check made to remove the shadow if we are at the left edge of the
        // screen so we don't interfere with the edge effect
        if (offset != 0) {
            // left drawable
            mBounds.left = offset;
            mBounds.right = offset + SHADOW_WIDTH;
            mDrawableLeft.setBounds(mBounds);
            mDrawableLeft.draw(canvas);
        }
        // check made to remove the shadow if we are at the right edge of the
        // screen so we don't interfere with the edge effect
        if ((offset + getMeasuredWidth()) < computeHorizontalScrollRange()) {
            // right drawable
            mBounds.left = offset + getMeasuredWidth() - SHADOW_WIDTH;
            mBounds.right = offset + getMeasuredWidth();
            mDrawableRight.setBounds(mBounds);
            mDrawableRight.draw(canvas);
        }
    }

}
like image 118
user Avatar answered Sep 21 '22 11:09

user