gpt4 book ai didi

android - 如何通过触摸聆听绘制多个圆圈?

转载 作者:行者123 更新时间:2023-11-30 03:57:22 26 4
gpt4 key购买 nike

我试图让用户使用触摸在我的 ImageView 上绘制多个圆圈。到目前为止,我一次只画了一个。我知道我必须在调用 invalidate() 后存储触摸点并重新绘制每个圆圈,但还没有想出办法来做到这一点。

这是我的代码,如果有人能指出我必须添加/更改的内容或就如何实现此代码提供任何建议,我将不胜感激:

public class ImageView1 extends ImageView {

public int x;
public int y;

ImageView1 img = (ImageView1) findViewById (R.id.imageView1);


public ImageView1(Context context, AttributeSet attrs) {
super(context, attrs);
setFocusable(true);

}

public boolean onTouchEvent(MotionEvent event){

x = (int) event.getX();
y = (int) event.getY();


return true;
}

@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint p = new Paint();

p.setAntiAlias(true);
p.setColor(Color.RED);
p.setStyle(Paint.Style.STROKE);
p.setStrokeWidth(1);

canvas.drawCircle(x, y, 20, p);
invalidate();
}

}

最佳答案

我通常以指针 ID 作为键将指针位置信息收集到 SparseArray 中;

private SparseArray<PointF> mPointers = new SparseArray<PointF>();

@Override
public boolean onTouchEvent(MotionEvent me) {
switch (me.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN: {
int ai = me.getActionIndex();
PointF pt = new PointF(me.getX(ai), me.getY(ai));
mPointers.put(me.getPointerId(ai), pt);
return true;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP: {
int pid = me.getPointerId(me.getActionIndex());
mPointers.remove(pid);
return true;
}
case MotionEvent.ACTION_MOVE: {
for (int i = 0; i < me.getPointerCount(); ++i) {
PointF pt = mPointers.get(me.getPointerId(i));
pt.set(me.getX(i), me.getY(i));
}
return true;
}
}
return false;
}

然后为了呈现单独的触摸点,您可以迭代 mPointers 值。

关于android - 如何通过触摸聆听绘制多个圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com