2017-02-22 20 views
0

Я хотел бы нарисовать криволинейный счетчик часов. До сих пор я только добрался до изгиба.Рисование изогнутых текстовых счетчиков часов мудрых вместо часов мудрых

public class TextDrawActivity extends AppCompatActivity { 
    @Override protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(new TextDrawingView(this)); 
    } 

    static class TextDrawingView extends View { 
    private Path arc; 
    private RectF bounds; 
    private TextPaint textPaint;  

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

     arc = new Path(); 
     bounds = new RectF(); 
     textPaint = new TextPaint(); 
     textPaint.setAntiAlias(true); 
     textPaint.setTextSize(50); 
     textPaint.setColor(Color.BLACK); 
    } 

    @Override public void draw(Canvas canvas) { 
     super.draw(canvas); 

     bounds.set(0f, 0f, getWidth() * 0.8f, getHeight()/2.f); 

     arc.rewind(); // Clear internal structure. 
     arc.addArc(bounds, 45, 360); 
     canvas.drawTextOnPath("Lorem ipsum dolor sit amet, consectetur adipisicing elit.", 
      arc, 0, textPaint.getTextSize()/2.f, textPaint); 
    } 
    } 
} 

С помощью этого кода, он будет выглядеть следующим образом:

Text

Как я могу сделать встречное текст часовой стрелки, так что не будет с ног на голову больше?

+0

Вы triend инициализировать 'Path' [против часовой стрелки] (https://developer.android. ком/ссылки/Android/графика/Path.Direction.html)? – azizbekian

+0

@azizbekian нет перегрузки для addArc с направлением – Niklas

+0

Я думаю, что [это] (https://hemantvc.blogspot.de/2016/10/text-curve-clockwise-and-anticlockwise_95.html) поможет вам. – azizbekian

ответ

1

Как pskink ответил в комментариях, отрицательный sweepAngle может быть использован для достижения этого эффекта:

@Override public void draw(final Canvas canvas) { 
    super.draw(canvas); 

    bounds.set(0f, 0f, getWidth() * 0.8f, getHeight()/2.f); 

    arc.rewind(); // Clear internal structure. 
    arc.addArc(bounds, 135, -180); 
    canvas.drawTextOnPath("Lorem ipsum dolor sit amet, consectetur adipisicing elit.", arc, 0, textPaint.getTextSize()/2.f, textPaint); 
} 
+0

Обратите внимание, что вы вызывая 'arc.addArc' внутри' draw', поэтому он будет добавлять и добавлять и добавлять ... вы знаете, что я имею в виду? – pskink

+0

Yup это просто для размытости. В моем реальном коде я делаю это только один раз, или я использую 'arc.rewind()'. Однако я обновлю его. – Niklas

+0

ОК, я вижу его сейчас ... – pskink