【问题标题】:Determine if a view is partly off-screen确定视图是否部分在屏幕外
【发布时间】:2015-09-10 16:37:36
【问题描述】:

我有一个动态添加的视图。有时,视图仅部分可见,因为它的底部不在屏幕上。在这种情况下,我想向上移动视图。但是,我不知道如何检测它是否在屏幕外以及多少。

编辑:这个问题的背景是我有一个编辑文本,我想在它旁边显示一个自定义软键盘。这是我用来移动自定义键盘的代码。

 public void moveKeyboardNextToView(View view) {
    int[] location = new int[]{0, 0};
    view.getLocationInWindow(location);
    Rect r = new Rect();
    view.getGlobalVisibleRect(r);

    int height = r.bottom - r.top;
    int newTop = r.bottom - view.getHeight() / 2 - this.mKeyboardView.getHeight() / 2;
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) this.mKeyboardView.getLayoutParams();
    params.setMargins(0, newTop, 0, 0);
    this.mKeyboardView.setLayoutParams(params);
    this.mKeyboardView.invalidate();

    this.mKeyboardView.post(new Runnable() {
        @Override
        public void run() {
            int[] location = new int[2];
            Rect r2 = new Rect();
            mKeyboardView.getLocalVisibleRect(r2);
            double abc = r2.bottom;
        }
    });
}

【问题讨论】:

标签: android


【解决方案1】:

我这样做的方法是,使用以下信息计算它:

如果您掌握了这些信息,计算所需的一切就不再那么困难了。只需确保您对每个值都使用相同的单位(像素、dpi 等)。

【讨论】:

  • 对我不起作用。 getMeasuredHeight() 给出裁剪的视图高度。
【解决方案2】:

这是一个迟到的答案,但为了将来参考,我为此目的创建了一个库。如果您的视图在滚动视图内,您可以使用我的库

它添加了一个onScrollChangedListener from ViewTreeObserver,并且每次滚动更改都会重新计算视图的可见百分比并调用自定义侦听器。

你可以在这里找到它:PercentVisibleLayout

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 2011-06-08
    • 2023-03-31
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多