4

9パッチとカスタムビューグループを作成し、そのビューグループの背景を9パッチにしました。

問題は次のとおりです。9つのパッチが「コンテンツ領域」の設定を無視しています。

だから:カスタムビューで9つのパッチを適切に使用するにはどうすればよいですか?

また:

OnMeasureおよびOnLayoutの計算で使用できるように、9つのパッチからコンテンツ領域を取得するにはどうすればよいですか?

4

3 に答える 3

6

また、NinePatchDrawableでboolean getPadding(Rect padding)を使用して、コンテンツのパディングを取得します(コンテンツ+ 9patchパディング=グループ全体のサイズ)

于 2011-06-01T17:06:01.237 に答える
0

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);
  }
 }
于 2011-06-01T17:03:16.643 に答える
0

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();
于 2013-03-26T20:58:13.780 に答える