Я создал пользовательский вид.
Мне нужно получить координаты X и Y, когда мой палец находится на этом виде.
Для этого я использую onTouchEvent метод, но по какой-то причине он срабатывает один раз, и я не понимаю, почему.
В чем может быть проблема?
MyCustomView:
public class MyCustomView extends View {
private int layoutWidth, layoutHeight = 0;
private radius = 0;
private isInit = false;
public MyCustomView(Context context) {
super(context);
}
public MyCustomView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyCustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void initMyCustomView() {
layoutWidth = getWidth();
layoutHeight = getHeight();
radius = Math.min(height, width) / 2;
isInit = true;
}
@Override
protected void onDraw(Canvas canvas) {
if (!isInit) initMyCustomView();
drawCircle(canvas);
postInvalidateDelayed(500);
invalidate();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("LOGD", "onTouchEvent");
return true;
}
private void drawCircle(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(getResources().getColor(android.R.color.white));
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.STROKE);
paint.setAntiAlias(true);
canvas.drawCircle(layoutWidth / 2, layoutHeight / 2, radius, paint);
}
}
РЕШЕНО:
Проблема заключалась в том, что onTouchEvent работало, но если вы переместили пальцем выше или ниже точки нажатия, он перестал работать.
Оказалось, что это происходит, если ваш CustomView (или любой другой View , Layout , et c.) Помещается в NestedScrollView .
Это легко исправить, вам просто нужно добавить строку getParent (). RequestDisallowInterceptTouchEvent ( true); in onTouchEvent :
@Override
public boolean onTouchEvent(MotionEvent event) {
getParent().requestDisallowInterceptTouchEvent(true);
return true;
}