1

我正在製作一個繪圖板應用程序。我想實現一個繪製圖像的「筆」。在圖像上繪製而不是在android中的圖像視圖

而且到目前爲止,我創建一個自定義的ImageView:

public class CustomDraw extends ImageView { 

    private int color = Color.BLACK; 
    private float width = 4f; 
    private List<Holder> holderList = new ArrayList<Holder>(); 

    private class Holder {  
     Path path; 
     Paint paint; 

     Holder(int color, float width) { 
      path = new Path(); 
      paint = new Paint(); 
      paint.setAntiAlias(true); 
      paint.setStrokeWidth(width); 
      paint.setColor(color); 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeJoin(Paint.Join.ROUND); 
      paint.setStrokeCap(Paint.Cap.ROUND); 
     } 
    } 

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

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

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

    private void init() { 
     holderList.add(new Holder(color, width)); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     for (Holder holder : holderList) { 
      canvas.drawPath(holder.path, holder.paint); 
     } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     float eventX = event.getX(); 
     float eventY = event.getY(); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       holderList.add(new Holder(color,width)); 
       holderList.get(holderList.size() - 1).path.moveTo(eventX, eventY); 
       return true; 
      case MotionEvent.ACTION_MOVE: 
       holderList.get(holderList.size() - 1).path.lineTo(eventX, eventY); 
       break; 
      case MotionEvent.ACTION_UP: 
       break; 
      default: 
       return false; 
     } 

     invalidate(); 
     return true; 
    } 

    public void resetPaths() { 
     for (Holder holder : holderList) { 
      holder.path.reset(); 
     } 
     invalidate(); 
    } 

    public void setBrushColor(int color) { 
     this.color = color; 
    } 

    public void setWidth(float width) { 
     this.width = width; 
     } 
} 

的問題是,我怎麼能在圖像上畫出實際而不是ImageView的?這意味着,我不應該能夠在圖像外繪製圖像,並且當我縮放視圖時,內容應該相應地縮放。我發現並試圖使用擴展drawable,但似乎我不能在運行時繪製。

謝謝

+1

見這個例子(http://www.java2s.com/Code/Android/ [上的圖片,保存繪圖] 2D-Graphics/DrawonPictureandsave.htm) – Wildroid 2015-01-21 03:07:10

回答