我有一个自定义SurfaceView,init函数加载所有Bitmaps并从构造函数调用它,但我想调整一个Bitmap,我只能在onMeasure之后和onDraw之前执行此操作。这是我自定义SurfaceView中的OnMeasure方法:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
measuredHeight = MeasureSpec.getSize(heightMeasureSpec);
measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
scrollableBg = Bitmap.createScaledBitmap(srcScrollableBg, measuredWidth, measuredHeight, true);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
IDE为drawlableBg分配说“在绘制/布局操作期间避免对象分配(预分配和重用)”,但我不能在init中执行此操作,因为我没有measuredWidth和measuredHeight ...
答案 0 :(得分:0)
考虑使用onLayout
:
protected void onLayout(boolean changed,int left,int top,int 对,int bottom)
在API级别1中添加此视图应分配时从布局调用 每个孩子的大小和位置。派生类 孩子们应该覆盖这个方法,并在每个方法上调用布局 孩子。
在onMeasure
之后调用它。一个好的做法可能是仅在changed == true
时分配对象:您将从IDE获得相同的警告,但这样您就可以安全地忽略它。
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (changed) {
// allocate bitmap
// get width with right - left
// get height with bottom - top
}
super.onLayout(changed, left, top, right, bottom);
}