2013-03-29 2 views
-1

MyLine과 CanvasView를 편집했는데 이제는 일반 선과 점선을 그렸습니다. 그런 다음 일반 선을 클릭하면 점선이 그려집니다. 아래로 코드를 편집했습니다. 내가 MyLine 민간 페인트를 만든 후, 된 onDraw에서 line.paint는 getPaintNormal & Dashed lines 문제

에 여기
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; 
} 

를 형질 전환 된 onDraw()에서 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); 
} 

} 

그래서 두 개인 속성을 추가 (오른쪽 dasheffect와 올바른 페인트를 따기) 그에 따라 자신을 그려 보자 : 당신이 probaly 수행 할 작업 (210)는 각 MyLine에게 자신의 재산을 줄입니다

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

후 추첨 방법은 매우 간단하게 :

Myline에 너무 라인이 자기 자체를 그리는 방법에 대한 지식을 가지고
public void draw(Canvas c){  
    c.drawLine(xStart,yStart,xEnd,yEnd,paint); 
} 
+0

내 편집 된 코드를보세요. –

1

B

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

당신입니다 모든 선에 대한 효과를 다시 설정하므로 그려지는 것입니다. 모두 파선 또는 모두 정상 임

boolean drawDashed =true/false; 

그리고

+0

'부울 drawDashed = 거짓;'이것은 내 부울입니다. 당신이하고 싶은 것을 모른다. –