2013-03-29 2 views
-1

Я редактировал MyLine и CanvasView, но теперь я рисую нормальную линию и пунктирную линию, но после этого я нажимаю на обычную линию и рисую пунктирную линию. Вниз вы редактировали код mt. После того, как я создал частный краски в MyLine, line.paint из OnDraw был преобразован в getPaintПроблемы с нормальными и пунктирными линиями

Here you have MyLine.java 

    public class MyLine { // line 
    public float x,y; 
    public float xStart,yStart,xEnd,yEnd; 
    private boolean drawDashed; 
    private Paint paint = new Paint(); 

public MyLine(boolean drawDashed) 
{ 
    if(drawDashed){ 
    getPaint().setColor(Color.BLUE); 
    getPaint().setStyle(Paint.Style.STROKE); 
    getPaint().setPathEffect(new DashPathEffect(new float[]{20,30}, 0)); 
    getPaint().setAntiAlias(true); 
    getPaint().setStrokeJoin(Paint.Join.ROUND); 
    getPaint().setStrokeWidth(5f); 
    } else{ 
     getPaint().setColor(Color.RED); 
     getPaint().setStyle(Paint.Style.STROKE); 
     getPaint().setPathEffect(null); 
     getPaint().setAntiAlias(true); 
     getPaint().setStrokeJoin(Paint.Join.ROUND); 
     getPaint().setStrokeWidth(5f); 
    } 
} 

public void mouseDown(Path path,float xDown,float yDown){ 
    //path.moveTo(xDown, yDown); 
// path.lineTo(xDown, yDown); 

    xStart = xDown; 
    yStart = yDown; 
} 

public void mouseUp(Path path,float xUp,float yUp){ 
    //path.lineTo(xUp, yUp); 
    xEnd = xUp; 
    yEnd = yUp; 
} 

public void draw(Canvas c){ 
    getPaint().setColor(Color.GREEN); 
    //paint.setStyle(Paint.Style.STROKE); 
    getPaint().setPathEffect(new DashPathEffect(new float[]{10,20}, 0)); 
    getPaint().setAntiAlias(true); 
    getPaint().setStrokeJoin(Paint.Join.ROUND); 
    getPaint().setStrokeWidth(5f); 

    c.drawLine(xStart,yStart,xEnd,yEnd,getPaint()); 
} 

public Paint getPaint() { 
    return paint; 
} 

public void setPaint(Paint paint) { 
    this.paint = paint; 
} 

Вот от CanvasView.java

protected void onDraw(Canvas canvas) { 
    paint.setPathEffect(null); 
    if(bitmap!=null){ 

     canvas.drawBitmap(bitmap, 0, 0, paint); 
     for(MyCircle circle:circleList){// draw circles 

      myCanvas.drawCircle(getCircleMidPointX(circle.firstX, circle.lastX),getCircleMidPointY(circle.firstY, circle.lastY),circle.radius,myPaint); 
     } 

    } 

    for (Path p : paths){ 
     canvas.drawPath(p, paint); 
    } 
    canvas.drawPath(path, paint); 


    for(MyLine line:lineList){ //draw lines 
     canvas.drawLine(line.xStart, line.yStart, line.xEnd, line.yEnd, line.getPaint()); 
     } 
final OnTouchListener drawLineListener = new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 

      FirstActivity.ll.setVisibility(LinearLayout.GONE); 

      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        myLine = new MyLine(dashedLine); 
        myLine.xStart = event.getX(); 
        myLine.yStart = event.getY(); 

       return true; 

       case MotionEvent.ACTION_MOVE: 
       case MotionEvent.ACTION_UP: 
       myLine.xEnd = event.getX(); 
       myLine.yEnd = event.getY(); 
       invalidate(); 
       lineList.add(myLine); 
       break; 

       default: 
       Log.d("mock it up", "Unknown touch event " + event.toString()); 
       return false; 
      } 
      return true; 

     } 
    }; 

    final OnTouchListener drawDashedLineListener = new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 

      FirstActivity.ll.setVisibility(LinearLayout.GONE); 

      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
       return true; 

       case MotionEvent.ACTION_MOVE: 
       case MotionEvent.ACTION_UP: 

       break; 

       default: 
       Log.d("mock it up", "Unknown touch event " + event.toString()); 
       return false; 
      } 
      return true; 

     } 
    }; 
+0

название не связано .. – Doomsknight

ответ

0
public class MyLine { // line 

public float x,y; 
    public float xStart,yStart,xEnd,yEnd; 
    private boolean drawDashed; 
    private Paint paint = new Paint(); 
    public MyLine(boolean drawDashed) 
    { 
     if(drawDashed){ 
     ... 
     paint.setPathEffect(new DashPathEffect(new float[]{10,20}, 0)); 
     .... 
     } else{ 
     .... 
     paint.setPathEffect(null); 
     ... 
     } 
    } 

public void mouseDown(Path path,float xDown,float yDown){ 
    //path.moveTo(xDown, yDown); 
// path.lineTo(xDown, yDown); 

    xStart = xDown; 
    yStart = yDown; 
} 

public void mouseUp(Path path,float xUp,float yUp){ 
    //path.lineTo(xUp, yUp); 
    xEnd = xUp; 
    yEnd = yUp; 
} 

public void draw(Canvas c){ 

    c.drawLine(xStart,yStart,xEnd,yEnd,paint); 
} 

} 

Так добавить два частных свойства в Myline так линия оно само есть знание как рисовать себя:

private boolean drawDashed; 
private Paint paint = new Paint(); 

то метод рисования становится очень просто:

public void draw(Canvas c){  
    c.drawLine(xStart,yStart,xEnd,yEnd,paint); 
} 
+0

Посмотрите на мой отредактированный код. –

1

б в OnDraw()

if(dashedLine) 
    line.paint.setPathEffect(dashEffect); 
else 
    line.paint.setPathEffect(null); 

You сбрасывают эффект для всех линий, так что это то, что делается: все пунктирные или все нормальные

То, что вы probaly хотите сделать, это дать каждому MyLine свою собственность:

boolean drawDashed =true/false; 

И настаивайте себя соответствующим образом (выбор правильной краски с правой dasheffect)

+0

'boolean drawDashed = false;' это мой логический Я не знаю, что вы хотите делать –

Смежные вопросы