在基于 ARM 的设备上,getHeight() 始终为 0 onMeasure

getHeight() is always 0 onMeasure on ARM based devices

我有一个项目,我必须用气泡和嘶嘶声效果填充一杯啤酒。

我正在使用图书馆:https://github.com/andyb129/BeerProgressView &在实现此库后,动画不适用于基于 arm 的设备,即 arm64-v8a 和 armeabi-v7a。

这是我的代码: https://drive.google.com/open?id=0B5kjnHTF2m1DWVNfQWtpYmlielk

我尝试将库添加为模块,并尝试使用 gradle 添加库。

此外,在 GitHub 页面上也查询了问题:https://github.com/andyb129/BeerProgressView/issues/7

虽然示例代码有效: https://drive.google.com/open?id=0B5kjnHTF2m1DMXBIR2hwdUVleFU

如果有人能指出我的错误,我将不胜感激。

显示进度:自定义视图代码为:

 public void setBeerProgress(int beerProgress) {
        mBeerProgress = beerProgress;
        if (mBeerProgress > mMax){
            mBeerProgress = mMax;
        }
        if (mBeerProgress < 0){
            mBeerProgress = 0;
        }
        float pecent = mBeerProgress * 1.0f / mMax;
        mBeerProgressHeight = pecent * mBeerHeight;
        invalidate();
    }

在上面的代码中,mBeerHeight 始终为 0。

所以我提前搜索了一下,

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        mBeerWidth = (int) (getWidth() - mHaftBorderRadius);

        Log.d(TAG, "Pawan getHeight(): "+getHeight());
        mBeerHeight = (int) (getHeight() - mHaftBorderRadius);

        mBorderRectF.set(mHaftBorderRadius, mHaftBorderRadius, mBeerWidth, mBeerHeight);
    }

此处,在上面的代码中,getHeight() 始终为 0.... :-(

终于得到答案:

引用自: getWidth() and getHeight return zero after onMeasure() (specific devices)

最新代码:

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

//        mBeerWidth = (int) (getWidth() - mHaftBorderRadius);
        mBeerWidth = (int) (getMeasuredWidth() - mHaftBorderRadius);
        Log.d(TAG, "Pawan getMeasuredHeight(): "+getMeasuredHeight());
//        mBeerHeight = (int) (getHeight() - mHaftBorderRadius);
        mBeerHeight = (int) (getMeasuredHeight() - mHaftBorderRadius);




        mBorderRectF.set(mHaftBorderRadius, mHaftBorderRadius, mBeerWidth, mBeerHeight);
    }

getMeasureWidth() 和 getMeasureWidth() 将为您提供正确的宽度和高度。