com.facebook.react.views.scroll.ReactHorizontalScrollContainerView.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.react.views.scroll.ReactHorizontalScrollContainerView.java

Source

// Copyright (c) Facebook, Inc. and its affiliates.

// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.

package com.facebook.react.views.scroll;

import android.content.Context;
import android.support.v4.view.ViewCompat;
import android.view.ViewGroup;
import android.widget.HorizontalScrollView;
import com.facebook.react.modules.i18nmanager.I18nUtil;

/** Container of Horizontal scrollViews that supports RTL scrolling. */
public class ReactHorizontalScrollContainerView extends ViewGroup {

    private int mLayoutDirection;
    private int mCurrentWidth;

    public ReactHorizontalScrollContainerView(Context context) {
        super(context);
        mLayoutDirection = I18nUtil.getInstance().isRTL(context) ? ViewCompat.LAYOUT_DIRECTION_RTL
                : ViewCompat.LAYOUT_DIRECTION_LTR;
        mCurrentWidth = 0;
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        if (mLayoutDirection == LAYOUT_DIRECTION_RTL) {
            // When the layout direction is RTL, we expect Yoga to give us a layout
            // that extends off the screen to the left so we re-center it with left=0
            int newLeft = 0;
            int width = right - left;
            int newRight = newLeft + width;
            setLeft(newLeft);
            setRight(newRight);

            // Call with the present values in order to re-layout if necessary
            HorizontalScrollView parent = (HorizontalScrollView) getParent();
            // Fix the ScrollX position when using RTL language
            int offsetX = parent.getScrollX() + getWidth() - mCurrentWidth;
            parent.scrollTo(offsetX, parent.getScrollY());
        }
        mCurrentWidth = getWidth();
    }
}