Android视图getheight()在某些设备上返回错误的px值

时间:2016-07-11 12:55:06

标签: android android-canvas

我正在处理我的应用中的一项功能,我需要知道父视图的确切高度。但显然这个值在某些设备上是错误的(例如我的华为P8 lite)。

当我尝试在点(x,view.getheight)绘制一些东西时,我意识到这是错误的,其中点没有出现在底部,而是靠近屏幕的中间。我的Google Nexus不是这种情况。

以下是问题所在的代码片段:

final OverlayBuilder builder = new OverlayBuilder(context, parentView, tag);
        builder.setOnLayoutListener(new ServiceCallback<OverlayBuilder.OverlayRelativeLayout>() {
            @Override
            public void onSuccess(OverlayBuilder.OverlayRelativeLayout overlayLayout) {
                ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) createAgentBtn.getLayoutParams();
                LinearLayout childContainer     = overlayLayout.getChildContainer();

                int parentHeight                = parentView.getHeight();

                View iconView                   = childContainer.getChildAt(0);
                View textView                   = childContainer.getChildAt(1);
                int noContentViewHeight         = iconView.getHeight() + textView.getHeight();


                int btnHeight                   = createAgentBtn.getHeight() + lp.topMargin + lp.bottomMargin;
                int bottomOffset                = ((parentHeight - btnHeight) / 2) - (noContentViewHeight / 2);
                int aStartY                     = bottomOffset + noContentViewHeight;
                int aEndY                       = parentHeight - btnHeight;

                ArrayList<Integer> layoutRules = new ArrayList<>(RelativeLayout.ALIGN_PARENT_BOTTOM);
                builder.setGroupParams(layoutRules, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT, 0, bottomOffset, LinearLayout.VERTICAL)
                .drawCurvedArrow(300, aStartY, 300, aEndY, -225, R.color.turtle_green, OverlayBuilder.STANDARD_LINESIZE, OverlayBuilder.STANDARD_ARROWSIZE).layout().commit();
            }

            @Override
            public void onFail(Throwable t) {
                Log.e(tag, "Failed to display empty state onboarding");
            }
        });

对于记录,名为OverlayBuilder的类是一个构建器类,用于在运行时在屏幕上绘制不同的东西。如果我在两点之间画一个箭头,但是我的华为P8上的线/箭头的开头和结尾都是完全错误的。

我怀疑getHeight()在某些情况下会返回dp,而在我的Google Nexus中会返回px。如果是这种情况,如何正确修复? 变量parentHeight是包含错误高度的变量。

0 个答案:

没有答案