如何获得当前canvas?

我有DrawView。 如果我触摸这个视图,会画出小圆圈。 我不想绘制圆圈,但不要触摸视图 – 与帮助function“setPoints”。 我做的事:

package com.samples; import ... public class DrawView extends View { ArrayList<Point> points = new ArrayList<Point>(); Paint paint = new Paint(); private int pSize = 5; private int pColor = Color.BLACK; public DrawView(Context context, AttributeSet attrs) { super(context, attrs); setFocusable(true); setFocusableInTouchMode(true); this.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.setOnTouchListener(this); Point point = new Point(); point.x = event.getX(); point.y = event.getY(); points.add(point); invalidate(); } return true; } }); requestFocus(); } @Override public void onDraw(Canvas canvas) { for (Point point : points) { canvas.drawCircle(point.x, point.y, pSize, paint); } } public void setPoints(Float xP, Float yP) { Point point = new Point(); point.x = xP; point.y = yP; points.add(point); postInvalidate(); } } class Point { float x, y; @Override public String toString() { return x + ", " + y; } } 

请告诉我,如何让canvas出来setPointsfunction?

更新:哇,这真是有趣的问题。 我的DrawView包含在Horizo​​ntalScrollView中。 因为如果我在这个DrawView中设置了正确的坐标,没有人知道哪里是可绘制的圆圈。

Solutions Collecting From Web of "如何获得当前canvas?"

你不能。 canvas由系统pipe理,并传递给你的onDraw() 。 我不明白你为什么需要它在那里。 只需像这样重新声明setPoints

 public void setPoints(Canvas canvas, Float xP, Float Yp) 

您可以保留以前的图纸caching(或存储以前的点)

尝试在DrawView类中声明canvas2作为公共variables。

你在onDraw()绘制你的圈子。 这是View应该工作的方式(从技术上说,它实际上是在draw()方法中,但我们会忽略)。 在setPoints() ,在类范围内的variables中设置圆的点,调用invalidate() ,然后绘制类似onDraw()的圆。 如果你遵循这个方法,那么你正在关注该视图所devise的类stream。