如何在onMeasure之后在自定义surfaceview中分配位图?

时间:2016-04-29 22:39:40

标签: android android-layout android-bitmap

我有一个自定义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 ...

1 个答案:

答案 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);
}