【问题标题】:Colour the padding of a View为视图的填充着色
【发布时间】:2014-07-20 08:21:15
【问题描述】:

假设我有视图 A,它覆盖了整个屏幕

然后我做

a.setPadding(90, 0, 90, 0)

所以它现在向下 90 像素,向左 90 像素

我怎样才能给这 90 个像素上色,比如红色?

如果我使用 .setBackgroundColour(int colour) 它显然会为整个视图着色

那我该怎么办?

如果这是不可能的,是否有可能有一个只有红色、90 像素宽并覆盖该填充区域的视图?但仍然允许触摸事件通过填充区域

我需要以编程方式完成所有这些操作

【问题讨论】:

  • 您可以为父视图设置背景颜色。
  • 将 setBackgroundDrawable 与自定义一起使用。 Drawable 绘制不同颜色的填充
  • @indivisible 它是父级
  • @pskink 我需要使用颜色。因为边距发生变化
  • @HamzahMalik,但必须如此吗?视图中的视图有什么问题?或者,如果您对完全方形的边框感到满意,那么您可以使用相对布局来放置视图(宽度/高度与您所需的填充相匹配)接触顶部、右侧、底部和顶部边缘以及您想要的视图内部。将视图设置为与目标视图具有相同的 OnClickListener。

标签: java android view colors padding


【解决方案1】:

您可以创建一个在填充区域中绘制颜色的自定义视图。我在这里扩展 View,但如果您愿意,您可以扩展其他内容。

package sample.package.name;

public class ColoredPaddingView extends View {
    Rect rect = new Rect();

    // Constructors omitted. Override them all and call the super constructor

    @Override
    public void onDraw(Canvas canvas) {
        int l = getPaddingLeft();
        int t = getPaddingTop();
        int r = getWidth() - getPaddingRight();
        int b = getHeight() - getPaddingBottom();
        rect.set(l, t, r, b);

        canvas.save();
        canvas.clipRect(rect, Region.Op.DIFFERENCE);
        canvas.drawColor(Color.RED); // or some other color
        canvas.restore;

        super.onDraw(canvas);
    }
}

在您的布局 XML 中,您可以像这样使用视图(包括包)的完全限定类名:

<sample.package.name.ColoredPaddingView
     android:layout_width="..."
     android:layout_height="..."
     ... />

【讨论】:

  • 这为内容着色,我想为实际的填充着色。创建各种彩色框架。编辑:没关系,我可以将内容设置为白色,并设置父背景,谢谢!
  • canvas.clipRect 应该省略裁剪区域。我可能使用了错误的 Region.Op,但目标是仅绘制非内容区域。尝试一下,看看你是否能让它做正确的事情。
猜你喜欢
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
相关资源
最近更新 更多