Tôi có DrawView. Nếu tôi chạm vào khung nhìn này, nó sẽ vẽ các vòng tròn nhỏ. Tôi sẽ không vẽ vòng tròn nhưng không chạm vào chế độ xem - với chức năng trợ giúp "setPoints". Những gì tôi làm:Cách tải canvas hiện tại?
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;
}
}
Vui lòng cho tôi biết, cách canvas out setPoints hoạt động?
Cập nhật: Ồ, đó thực sự là vấn đề thú vị. DrawView của tôi chứa trong HorizontalScrollView. Bởi vì nếu tôi đặt trong tọa độ bên phải DrawView này, không ai biết đâu là các vòng tròn có thể vẽ được.
Câu hỏi này khó hiểu. Vui lòng xem lại nó – Raffaele
Không dễ giải mã những gì bạn muốn hoàn thành :) Điều đầu tiên, xóa 'canvas2' đó: nó không hoạt động như bạn nghĩ. Tôi nghi ngờ bạn muốn giữ lại vòng tròn được vẽ trước đó, phải không? Nếu đây là mục tiêu của bạn, bạn phải duy trì lịch sử các cuộc gọi vẽ và có thể thực hiện theo hai cách: 1) bạn lưu trữ một mảng 'Point []' và vẽ từng vòng tròn trong 'onDraw'; hoặc 2) mỗi lần một vòng tròn được thêm vào, bạn cập nhật bộ nhớ cache 'Bitmap' – Raffaele
Tôi sẽ không vẽ vòng tròn này nhưng không chạm vào màn hình! – Leo