获取ScrollView隐藏部分的高度

时间:2016-03-25 14:26:30

标签: android scrollview

想象一下当屏幕位于var images = []; function preload() { for (i = 0; i < arguments.length; i++) { images[i] = new Image(); images[i].src = preload.arguments[i]; } } //-- usage --// preload( "http://domain.tld/gallery/image-001.jpg", "http://domain.tld/gallery/image-002.jpg", "http://domain.tld/gallery/image-003.jpg" ) 中间时的情况。是否有可能在顶部隐藏部分的像素高度?

enter image description here

可以获得可见屏幕部分的高度:

ScrollView

可以通过获得儿童身高来获得 Rect scrollBounds = new Rect(); mScrollView.getHitRect(scrollBounds); 的身高:

ScrollView

但如何确定隐藏部分的高度?

3 个答案:

答案 0 :(得分:1)

mScrollView.getScrollY();返回此视图的滚动顶部位置,该位置是顶部“隐藏”部分的高度。

答案 1 :(得分:1)

一种解决方案是首先获得设备高度。

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int height = displayMetrics.heightPixels;

然后,获取可见Container的顶部高度。 我们假设您的可见容器是 RelativeLayout ,它在您的Activity类或Fragment类中被引用为 mVisibleConatiner

int topHeight = mVisibleConatiner.getTop();

然后,这两者的差异将是你隐藏的部分高度。

int hiddenPartHeightInPx = height - topHeight;

从来没有尝试过,但它应该有用。

答案 2 :(得分:0)

在我的 .xml 文件中,我是这样写的
viewContentView(LinearLayout) -> inside of -> mainScrollView

Scrollview format

然后在我的班级里面我这样声明

    final LinearLayout viewContentView = findViewById(R.id.viewContentView);
    final ScrollView mainScrollView = findViewById(R.id.mainScrollView);
    mainScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            int scrollY = mainScrollView.getScrollY(); // For ScrollView
            int scrollX = mainScrollView.getScrollX(); // For HorizontalScrollView
            Log.d("mainScrollView", "mainScrollView x: "+scrollX +"  || y: "+scrollY);
            Log.d("mainScrollView", "mainScrollView y: "+(viewContentView.getHeight() - mainScrollView.getBottom()));
            if(scrollY == 0){ //scroll to TOP
                viewpager.setVisibility(View.GONE);
            }else if(scrollY == (viewContentView.getHeight() - mainScrollView.getBottom())){ //scroll to Bottom
                viewpager.setVisibility(View.VISIBLE);
            }
        }
    });