我有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中设置了正确的坐标,没有人知道哪里有可绘制的圆圈。
答案 0 :(得分:6)
你做不到。画布由系统管理并传递给您的onDraw()
。我不明白为什么你需要它在那里之外。只需重新声明setPoints
就像这样
public void setPoints(Canvas canvas, Float xP, Float Yp)
您可以保留以前图纸的缓存(或存储以前的点数)
答案 1 :(得分:1)
尝试将canvas2声明为DrawView类中的公共变量。
答案 2 :(得分:0)
您在onDraw()
中绘制了自己的圈子。这就是View
应该工作的方式(从技术上讲,它实际上是draw()
方法,但我们会忽略它)。在setPoints()
中,在类范围内的变量中设置圆的点,调用invalidate()
,然后在onDraw()
中绘制圆圈。如果您遵循此方法,则遵循视图设计的类流程。