2012-01-24 39 views
3

我在主要活动中创建了一个名为DrawView的自定义视图。我在DrawView课上实施了onDraw()方法,它最初绘制一个圆圈。然后我添加了一个触摸侦听器,这样当用户点击时,它将绘制一个正方形。我达到了用户点击并绘制正方形的部分。我不确定如何去解决这个问题。Android,从主要活动绘图

public class TestActivity extends Activity { 
    DrawView drawing; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ViewGroup myLayout = (ViewGroup) findViewById(R.id.mainLayout); 

     drawing = new DrawView(this); 
     myLayout.addView(drawing); 

     drawing.setOnTouchListener(new View.OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        // draw a square 
       } 
       return true; 
      } 
     }); 
    } 

    private class DrawView extends View { 

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

     protected void onDraw(Canvas canvas) { 
      Paint myPaint = new Paint(); 
      myPaint.setColor(Color.BLACK); 
      // draw a circle 
     } 
    } 
} 

帮助将不胜感激。

回答

2

这里是绘制矩形,当用户下简单的代码片段,移动和向上触摸听者火,就在drawView函数类中重写不是setOnTouchListener()

定义drawView函数类的矩形R =新的矩形(),然后实施drawView函数类的代码后

public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     sx = event.getX(); 
     sy = event.getY(); 
     r.set(sx,sy,sx,sy); 
    }else if(event.getAction==MotionEvent.ACTION_UP){ 
     r.set(sx,sy,event.getX(),event.getY()); 
    }else if(event.getAction==MotionEvent.ACTION_MOVE){ 
     r.set(sx,sy,event.getX(),event.getY()); 
    } 
    invalidate(); 
    return true; 

}

这里是的onDraw()

public void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 
    canvas.drawRect(r, new Paint()); 
} 
+0

我想我已经得到了这个工作,但是,有没有一种绘制圆的方法,然后绘制广场没有删除圆?即最初绘制一个圆,用户点击,然后有一个正方形,显示正方形和圆形。我在谷歌环顾四周,我是否必须有某种数组来跟踪已绘制的内容,并且每次都重绘所有内容?即'Shapes [] ShapesDrawn = {circle,square,triangle,square}',将它放在on循环中的onDraw方法? – 1user1160804

0

你必须覆盖原来的类功能:

@Override 
public void onDraw(Canvas canvas 

要强制图纸,使用viewObject.invalidate()

0
mPaint = new Paint(); 
    mPaint.setAntiAlias(true); 
    mPaint.setDither(true); 
    mPaint.setColor(Color.GREEN); 
    mPaint.setStyle(Paint.Style.STROKE); 
    mPaint.setStrokeJoin(Paint.Join.ROUND); 
    mPaint.setStrokeCap(Paint.Cap.ROUND); 
    mPaint.setStrokeWidth(5); 


    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.TRANSPARENT); 
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
     canvas.drawPath(mPath, mPaint); 
    } 
1

您可以创建一个平局听众:

public interface OnDrawListener { 
    void onDraw(Canvas c); 
} 

... 

private class DrawView extends View { 
    private OnDrawListener onDrawListener; 

    public void setOnDrawListener(OnDrawListener onDrawListener) { 
     this.onDrawListener=onDrawListener; 
    } 

    @Override 
    protected void onDraw(Canvas c) { 
     onDrawListener.onDraw(c); 
    } 
} 

,然后编辑替代监听器:

// onCreate 
drawing.setOnDrawListener(new OnDrawListener() { 
    @Override 
    public void onDraw(Canvas c) { 
     // draw circle 
    } 
}); 

然后再次触摸事件并重写它以绘制正方形。