title: How to display Text in Android Canvas ShapeDrawable with in the RectShape or OvalShape?
body: <p>I'm trying to display Text in <a href="http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html" rel="nofollow noreferrer"><strong>RectShape</strong></a> which uses ShapeDrawable to display in Canvas.</p>
  
  <p>I'm able to display RectShape in this code, but looking for how to display the String on that!</p>
  
  <pre><code>  public class CustomDrawableView extends View {
    private ShapeDrawable mDrawable;
  
    public CustomDrawableView(Context context) {
    super(context);
  
    int x = 10;
    int y = 10;
    int width = 300;
    int height = 50;
  
    mDrawable = new ShapeDrawable(new OvalShape());
    mDrawable.getPaint().setColor(0xff74AC23);
    mDrawable.setBounds(x, y, x + width, y + height);
    }
  
    protected void onDraw(Canvas canvas) {
    mDrawable.draw(canvas);
    }
    }
  </code></pre>
  
  <p><strong>or</strong></p>
  
  <pre><code>public class ShapeDrawableTest extends View {
  
      ShapeDrawable shapes = new ShapeDrawable();
  
      public ShapeDrawableTest(Context context) {
          super(context);
      }
  
      public ShapeDrawableTest(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
  
      @Override
      protected void onDraw(Canvas canvas) {
          super.onDraw(canvas);
  
          shapes.draw(canvas);
  
      }
  
      @Override
      public boolean onTouchEvent(MotionEvent event) {
          if (event.getAction() == MotionEvent.ACTION_DOWN) {
              int x = (int) event.getX(); // Use getX(int) for multi-finger
                                          // gestures
              int y = (int) event.getY();
  
              makeShapeDrawable(x, y);
              invalidate();
              return (true); // Handled touch event
          } else {
              return (false); // Did not handle touch event
          }
      }
  
      private void makeShapeDrawable(int x, int y) {
          int maxWidth = getWidth() / 10;
          int maxHeight = getHeight() / 10;
          Shape shape;
  
          shape = new RectShape();
  
          shapes = new ShapeDrawable(shape);
          int width = RandomUtils.randomInt(maxWidth) + 5;
          int height = RandomUtils.randomInt(maxHeight) + 5;
          shapes.setBounds(x - width / 2, y - height / 2, x + width / 2, y
                  + height / 2);
          shapes.getPaint().setColor(Color.BLUE);
  
      }
  }
  </code></pre>
  
  <p><strong>What I tried is:</strong></p>
  
  <pre><code>public class CustomDrawableView extends View {
      public ShapeDrawable mDrawable;
  
        public CustomDrawableView(Context context) {
        super(context);
  
        }
  
  
          public CustomDrawableView(Context context, AttributeSet attrs) {
              super(context, attrs);
              int x = 10;
            int y = 10;
            int width = 300;
            int height = 50;
  
            mDrawable = new ShapeDrawable(new OvalShape());
            //mDrawable.getPaint().setColor(0xff74AC23);
            final String s = "Hello";
            Paint p = new Paint();
              Rect bounds = new Rect();
  
              bounds.set(x, y, x + width, y + height);
              p.setTextSize(20);
              p.setColor(Color.YELLOW);
             p.getTextBounds(s, 0, s.length(), bounds);
            mDrawable.getPaint().getTextBounds(s, 0, s.length(), bounds);
            mDrawable.setBounds(x, y, x + width, y + height);
  
  
  
          }
  //      public CustomDrawableView(Context context, AttributeSet attrs, int defStyle) {
  //          super(context, attrs, defStyle);
  //
  //      }
  
          public void onDraw(Canvas canvas) {
        mDrawable.draw(canvas);
        }
        }
  </code></pre>
  
  <p><strong>Screenshot:</strong></p>
  
  <p><img src="https://i.stack.imgur.com/lwhnC.png" alt="enter image description here"></p>