我有一个DrawView。如果我触摸这个视图,它会画出小圆圈。我想要画圆圈,但不想通过触摸视图来画 - 使用“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;
}
}
请告诉我,如何从setPoints函数中获取画布?
更新:
哇,这真是一个有趣的问题。我的DrawView包含在HorizontalScrollView中。因为如果我在这个DrawView中设置正确的坐标,就不知道可绘制的圆圈在哪里了。
canvas2
:它不像你想象的那样工作。我猜你想保留之前绘制的圆形,是吗?如果这是你的目标,你必须维护绘制调用的历史记录,并可以通过两种方式实现:1)存储一个数组Point[]
并在onDraw
中绘制每个圆;或者 2)每次添加圆时更新缓存的Bitmap
。 - Raffaele