9パッチとカスタムビューグループを作成し、そのビューグループの背景を9パッチにしました。
問題は次のとおりです。9つのパッチが「コンテンツ領域」の設定を無視しています。
だから:カスタムビューで9つのパッチを適切に使用するにはどうすればよいですか?
また:
OnMeasureおよびOnLayoutの計算で使用できるように、9つのパッチからコンテンツ領域を取得するにはどうすればよいですか?
9パッチとカスタムビューグループを作成し、そのビューグループの背景を9パッチにしました。
問題は次のとおりです。9つのパッチが「コンテンツ領域」の設定を無視しています。
だから:カスタムビューで9つのパッチを適切に使用するにはどうすればよいですか?
また:
OnMeasureおよびOnLayoutの計算で使用できるように、9つのパッチからコンテンツ領域を取得するにはどうすればよいですか?
また、NinePatchDrawableでboolean getPadding(Rect padding)を使用して、コンテンツのパディングを取得します(コンテンツ+ 9patchパディング=グループ全体のサイズ)
onDrawメソッドをオーバーライドして、オブジェクトをViewGroupに直接描画する必要がある場合があります。
public void onDraw(Canvas canvas) {
NinePatchDrawable bg = (NinePatchDrawable) resources.getDrawable(id);
if (bg != null) {
bg.setBounds(0, 0, getWidth(), getHeight());
bg.draw(canvas);
}
}
onMeasureで背景のパディングを取得して、使用可能な幅を減らします(これは、セルをグリッドに配置するためのものです)。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Drawable background = getBackground();
Rect padding = new Rect();
if (background != null && background.getPadding(padding));
int width = MeasureSpec.getSize(widthMeasureSpec);
int availableWidth = width - padding.left - padding.right;
また、onLayoutの場合、パディングが適用されます。
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int availableWidth = r - l - getPaddingLeft() - getPaddingRight();