【问题标题】:Rounded corners drawable via code可通过代码绘制的圆角
【发布时间】:2012-09-29 16:47:48
【问题描述】:

我有一个有时会改变颜色的drawable,但它必须总是有圆角。这是一个 UI 库,所以我不知道它会有什么颜色。 XML 不是一个选项,我必须用纯 java 来实现。

有没有办法在不使用 XML 的情况下以编程方式实现这一目标?

【问题讨论】:

    标签: android drawable background-drawable


    【解决方案1】:

    创建一个自定义 Drawable(即扩展 Drawable)并在其 onDraw 中使用 Canvas.drawRoundRect(RectF rect, float rx, float ry, Paint paint),将 Paint 设置为所需的颜色。

    【讨论】:

    • 是的,但我需要知道尺寸。我希望获得与使用 XML 相同的结果。
    • Drawable 通过 setBounds 获取其尺寸,如果 Drawable 设置为 View 的背景,则会自动调用。
    【解决方案2】:

    如果您自己绘制drawable,您可以使用Canvas.clipPath 设置剪辑路径。路径将由一个或多个矩形和一些圆形组成,它们会夹住圆角。您可能需要调整路径组件的排列,直到获得所需的输出。

    【讨论】:

      【解决方案3】:

      根据@nmw 的回答,这里有一些适用于此的代码:

      public class RRDrawable extends Drawable {
          private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
      
          public RRDrawable(int color) {
              paint.setColor(color);
              paint.setStyle(Paint.Style.FILL);
          }
      
          @Override
          public void draw(Canvas canvas) {
              int radius = 10; // note this is actual pixels
              canvas.drawRoundRect(new RectF(0,0,canvas.getWidth(), canvas.getHeight()), radius, radius,  paint);
          }
      
          @Override
          public void setAlpha(int i) {
              //.. not supported
          }
      
          @Override
          public void setColorFilter(ColorFilter colorFilter) {
              //.. not supported
          }
      
          @Override
          public int getOpacity() {
              return 1;
          }
      }
      

      编辑:向边缘添加抗锯齿。

      (source)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-10
        • 1970-01-01
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多