自定义视图组上的九个补丁

发布于 2024-11-11 16:05:55 字数 174 浏览 4 评论 0原文

我制作了一个九个补丁和一个自定义视图组,然后将该视图组的背景设置为九个补丁。

问题是:九个补丁忽略了“内容区域”设置。

那么:如何在自定义视图中正确使用九个补丁?

或者:

如何从九个补丁中获取内容区域,以便可以在 OnMeasure 和 OnLayout 数学中使用它?

I made a nine-patch, and a custom viewgroup, then I made the background of that viewgroup to be the nine-patch.

The problem is: The nine-patch is ignoring the "content area" settings.

So: How I use a nine-patch properly in a custom view?

OR:

How I grab the content area from the nine-patch so I can use it on the OnMeasure and OnLayout math?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

染墨丶若流云 2024-11-18 16:05:55

还可以在 NinePatchDrawable 上使用 boolean getPadding(Rect padding) 来获取内容的填充(您的内容 + 9patch 填充 = 总组大小)

Also use boolean getPadding(Rect padding) on the NinePatchDrawable to get the padding for the content (your content + 9patch padding = total group dize)

拥抱没勇气 2024-11-18 16:05:55

您可能需要通过重写其 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);
  }
 }

You may need to draw the object directly on the ViewGroup by overriding its onDraw method:

public void onDraw(Canvas canvas) {
 NinePatchDrawable bg =  (NinePatchDrawable) resources.getDrawable(id);
 if (bg != null) {
  bg.setBounds(0, 0, getWidth(), getHeight());
  bg.draw(canvas);
  }
 }
七颜 2024-11-18 16:05:55

在 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();

Get the background's padding in your onMeasure to decrease the available width (this is for laying out cells in a grid):

    @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;

And for onLayout, the padding is applied:

    @Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    int availableWidth = r - l - getPaddingLeft() - getPaddingRight();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文