2013-03-29 21 views
-1

我編輯了MyLine和CanvasView,但現在我畫法線和虛線,但之後,我點擊法線,並畫虛線。向下你有編輯的代碼。我在MYLINE創建的專用漆後,從onDraw有line.paint在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

b在的onDraw()

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

你正在重新設置所有線的效果,所以正在繪製的是:全部虛線或全部正常

你probaly想要做的是給每個MYLINE自有物業:

boolean drawDashed =true/false; 

讓它據此繪製自己(選擇用正確的dasheffect合適的顏料)

+0

'boolean drawDashed = false;'這是我的布爾值我不知道你想做什麼 –