2016-04-29 19 views
1

私はカスタムSurfaceViewを持っていますが、init関数はすべてのビットマップをロードしてコンストラクタから呼び出されますが、Bitmapのサイズを変更したいのですが、onMeasureの後でonDraw.Thisが私のカスタムSurfaceView内のOnMeasureメソッドです: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は、「オブジェクトの描画/レイアウト操作時に割り当てないでください(事前割り当てをし、代わりに再利用)」scrollableBgを割り当てるために言うが、私はいないはmeasuredWidthおよびmeasuredHeightのを持っているので、私は、initでこれを行うことはできません...

答えて

0
ボイドonLayoutこのビューは、そのそれぞれに サイズと位置を割り当てる必要があるときレイアウトから呼び出されたAPIレベル1に

追加さ(ブール変更、 右、INT底int型、int型の上部を左INT)保護

子供。 の子クラスを持つ派生クラスは、このメソッドをオーバーライドし、 子それぞれのレイアウトを呼び出す必要があります。

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); 
} 
関連する問題