【发布时间】:2015-10-02 09:12:25
【问题描述】:
我创建了一个扩展 ImageView 的类,允许我在触摸时在 ImageView 上绘制矩形。
我可以绘制矩形,但它们仅在我从起点向下和向右拖动矩形时才会显示。
如果我从起点向上或向左拖动矩形,则不会绘制矩形。 OnDraw() 触发但没有显示。
我的班级:
public class TagImageView extends ImageView {
private float downX;
private float downY;
private float upX;
private float upY;
private Paint paint;
public TagImageView(Context context) {
super(context);
init();
}
public TagImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public TagImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downX = event.getX();
downY = event.getY();
invalidate();
return true;
case MotionEvent.ACTION_MOVE:
upX = event.getX();
upY = event.getY();
invalidate();
return true;
case MotionEvent.ACTION_UP:
invalidate();
return true;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return super.onTouchEvent(event);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(downX, downY, upX, upY, paint);
}
}
编辑:不确定这是否相关? https://stackoverflow.com/a/24168545/2380071
【问题讨论】:
-
你能在
onDraw期间调试和检查downXdownYupXupY中的wat值吗?或者简单地在onDraw方法中写入Log.d并检查值 -
是的,它们似乎有效,在没有绘制任何内容的情况下:591、1225、274、965。在绘制矩形的情况下,downX
-
downX和downY是矩形的startX和startY。我相信这应该总是大于endX和endY,在你的情况下是upX和upY尝试通过canvas.drawRect(upX, upY,downX, downY, paint);如果upX和upY是>而不是downX和downY。希望这有效 -
感谢@Panther 的建议。如果我实施了您的建议,那么我相信如果我从起点向下和向右绘制矩形(意味着 upX > downX 或 upY > downY),我会遇到同样的问题。我相信我必须检查 downX 和 downY 是否小于或大于 upX 和 upY 然后进行相应处理。
标签: java android touch-event ondraw