2015-05-06 8 views
6

Mam wymóg utworzenia krzywej Beziera w moim projekcie. W tym celu rysuję obraz farbą, ale problemem jest to, że nie otrzymuję dokładnego kształtu dla mojej potrzeby, jak wspomniano na poniższym obrazku. Tak więc łaskawie pomóż mi z rozwiązaniami i zmianami lub modyfikacjami w moim kodzie. Z góry dziękuję.Jak narysować krzywą Beziera w Androidzie

Kod używam do tworzenia krzywej Beziera:

public class DrawView extends View { 

    public DrawView (Context context) { 
     super (context); 
    } 

    protected void onDraw (Canvas canvas) { 
     super.onDraw (canvas); 

     Paint pLine = new Paint() {{ 
      setStyle (Paint.Style.STROKE); 
      setAntiAlias (true); 
      setStrokeWidth (1.5f); 
      setColor (Color.RED); // Line color 
     }}; 

     Paint pLineBorder = new Paint() {{ 
      setStyle (Paint.Style.STROKE); 
      setAntiAlias (true); 
      setStrokeWidth (3.0f); 
      setStrokeCap (Cap.ROUND); 
      setColor (Color.RED); // Darker version of the color 
     }}; 
     Path p = new Path(); 
     Point mid = new Point(); 
     // ... 
     Point start =new Point (30,90); 
     Point end =new Point (canvas.getWidth()-30,140); 
     mid.set ((start.x + end.x)/2, (start.y + end.y)/2); 

     // Draw line connecting the two points: 
     p.reset(); 
     p.moveTo (start.x, start.y); 
     p.quadTo ((start.x + mid.x)/2, start.y, mid.x, mid.y); 
     p.quadTo ((mid.x + end.x)/2, end.y, end.x, end.y); 

     canvas.drawPath (p, pLineBorder); 
     canvas.drawPath (p, pLine); 
    } 
} 

główną działalność

public class MainActivity extends Activity { 

    private DrawView drawView; 

    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate (savedInstanceState); 
     drawView = new DrawView (this); 
     setContentView (drawView); 

    } 
} 

Moja rzeczywistego zapotrzebowania:

enter image description here

Wyjście które otrzymuję:

enter image description here

Odpowiedz

6

Po długiej walce znalazłem główną przyczynę mojego problemu od samego początku. Dzięki za tool, który pomógł mi wygenerować współrzędne, a także blog, który pokazał mi dokładną próbkę na moje potrzeby. Wreszcie mój kod jest następujący:

public class DrawView extends View { 

    Paint paint; 
    Path path; 

    public DrawView(Context context) { 
     super(context); 
     init(); 
    } 

    public DrawView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public DrawView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    private void init(){ 
     paint = new Paint(); 

     paint.setStyle(Paint.Style.STROKE); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     super.onDraw(canvas); 
     path = new Path(); 
     paint.setColor(Color.RED); 
     paint.setStrokeWidth(3); 
     path.moveTo(34, 259); 
     path.cubicTo(68, 151, 286, 350, 336, 252); 
     canvas.drawPath(path, paint); 

    } 
+0

Blog i narzędzie to odpowiedź! – murt

0

Nie zamknął swoją drogę i nie ustawić kolor do malowania.

Powiązane problemy