Я создал класс, который расширяет 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
downX
downY
upX
upY
во времяonDraw
. Или просто напишитеLog.d
внутри методаonDraw
и проверьте значения - person Panther   schedule 02.10.2015downX
иdownY
- этоstartX
иstartY
для прямоугольника. Я считаю, что это всегда должно быть больше, чемendX
иendY
, которые в вашем случае равныupX
иupY
. Попробуйте передатьcanvas.drawRect(upX, upY,downX, downY, paint);
, еслиupX
иupY
>
, чемdownX
иdownY
. Надеюсь, это работает - person Panther   schedule 02.10.2015