在基于 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() 将为您提供正确的宽度和高度。
我有一个项目,我必须用气泡和嘶嘶声效果填充一杯啤酒。
我正在使用图书馆: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() 将为您提供正确的宽度和高度。