17

I want to show text with circular shape in my android application.I know it is done with custome textview but can some buddy give me proper code.I am also attaching image which type of look i want.

enter image description here

Rishabh Agrawal
  • 861
  • 2
  • 15
  • 25

7 Answers7

25

you can try this tested and full working code :

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new GraphicsView(this));
    }

    static public class GraphicsView extends View {
        private static final String QUOTE = "This is a curved text";
        private Path circle;
        private Paint cPaint;
        private Paint tPaint;

        public GraphicsView(Context context) {
            super(context);

            int color = Color.argb(127, 255, 0, 255);

            circle = new Path();
            circle.addCircle(230, 350, 150, Direction.CW);

            cPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            cPaint.setStyle(Paint.Style.STROKE);
            cPaint.setColor(Color.LTGRAY);
            cPaint.setStrokeWidth(3);

            setBackgroundResource(R.drawable.heart);

            tPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            tPaint.setStyle(Paint.Style.FILL_AND_STROKE);
            tPaint.setColor(Color.BLACK);
            tPaint.setTextSize(50);
        }
        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawTextOnPath(QUOTE, circle, 485, 20, tPaint);
        }
    }
}

the output will be:

enter image description here

Hope this help.

Adil Soomro
  • 37,609
  • 9
  • 103
  • 153
Android Stack
  • 4,314
  • 6
  • 31
  • 49
6

Create a custom view and override the onDraw. In the onDraw, create a path and use drawTextOnPath. Something like this. textToDraw is the text you want to display. Paint is whatever paint you want.

@Override onDraw(Canvas canvas){
    Path path = new Path();
    path.addCircle(x, y, 200, Path.Direction.CW);
    canvas.drawTextOnPath(textToDraw, path, textX, textY, paint);
}

http://developer.android.com/training/custom-views/index.html http://developer.android.com/reference/android/graphics/Canvas.html#drawTextOnPath(java.lang.String, android.graphics.Path, float, float, android.graphics.Paint)

Simon
  • 14,407
  • 8
  • 46
  • 61
  • Also, For multi-res, use the underlying drawable's height to calculate the radius. – S.D. Oct 31 '12 at 08:22
  • http://www.networketiquette.net/do_not_use_all_caps.htm Now, to resume, what does "not working" mean? – Simon Oct 31 '12 at 09:35
  • I put this cod in doDraw() but nothing show in screen canvas.save(); Path path = new Path(); path.addCircle(-10, 10, 200, Path.Direction.CW); canvas.drawTextOnPath("Hello", path, -10, -10, null); super.onDraw(canvas); canvas.restore(); – Rishabh Agrawal Oct 31 '12 at 15:30
  • "I put this cod in doDraw()" doDraw, or onDraw? You also added the circle outside the view. x = -10 and the text outside the path. Please edit your question with your onDraw method. – Simon Oct 31 '12 at 16:38
  • let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/18876/discussion-between-rishabh-creatiosoft-and-simon) – Rishabh Agrawal Oct 31 '12 at 19:10
4

You have to create your own object "View" like this

public class YourView extends View {
    private static final String YOUR_TEXT = "something cool";
    private Path _arc;

    private Paint _paintText;

    public YourView(Context context) {
      super(context);

      _arc = new Path();
      RectF oval = new RectF(50,100,200,250);;
      _arc.addArc(oval, -180, 200);
      _paintText = new Paint(Paint.ANTI_ALIAS_FLAG);
      _paintText.setStyle(Paint.Style.FILL_AND_STROKE);
      _paintText.setColor(Color.WHITE);
      _paintText.setTextSize(20f);

    }

    @Override
    protected void onDraw(Canvas canvas) {
      canvas.drawTextOnPath(YOUR_TEXT, _arc, 0, 20, _paintText);
      invalidate();
    }
}

and then use it as your TextView :) hope this help

Dipak Keshariya
  • 22,193
  • 18
  • 76
  • 128
Angie
  • 277
  • 1
  • 7
4

You can have a look to the APIDemo source code bundled with the android SDK in your SDK dir.

The example "Graphics/Text Align" (file TextAlign.java) show how to display a text along a path: Screen capture of the path

You can then tweak it to build your screen.

Community
  • 1
  • 1
ol_v_er
  • 27,094
  • 6
  • 48
  • 61
3

You have implement it using custom views like in your onDraw method:

Path path = new Path();
path.addCircle(x, y, radius, Path.Direction.CW);
myCanvas.drawTextOnPath(myText, path, offset, 0, myPaint);
Khawar Raza
  • 15,870
  • 24
  • 70
  • 127
1

Try out following code..

onDraw(Canvas canvas){
 Path path = new Path();
 path.addArc(oval, startAngle, sweepAngle) 
 path.addArc(oval, 0, 180) 
 }

This may work....

Varun Vishnoi
  • 980
  • 1
  • 9
  • 32
-11

You not need to do custom view. Find correct TypeFace,put into your project and set to your TextView

Or use microsoft office word art and copy images to your project

enter image description here

Yahor10
  • 2,123
  • 1
  • 13
  • 13