When talkback is ON, on single tap it will call dispatchHoverEvent() and on double tap it will call dispatchTouchEvent() then onTouchEvent().
When view is focused with blue box in talkback mode, getX() and getRawX() of onTouchEvent is always the center point of the view. Not the Specific touch area point.
Example : Double tapping at right most area of the view , onToucEvent is giving center of the view. if views width is 1080, then onTouchEvent() -> getX() is always 540.
I tried with a sample project..
public class customView extends FrameLayout {
public customView(@NonNull Context context) {
super(context);
init();
}
public customView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public customView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
void init() {
setFocusable(true);
setFocusableInTouchMode(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("ANNN", "onTouchEvent : getX() " + event.getX() + ", getRawX() " + event.getRawX());
return super.onTouchEvent(event);
}
@Override
public boolean onHoverEvent(MotionEvent event) {
Log.d("ANNN", "onHoverEvent : getX() " + event.getX() + ", getRawX() " + event.getRawX());
return super.onHoverEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d("ANNN", "dispatchTouchEvent : getX() " + ev.getX() + ", getRawX() " + ev.getRawX());
return super.dispatchTouchEvent(ev);
}
@Override
protected boolean dispatchHoverEvent(MotionEvent event) {
Log.d("ANNN", "dispatchHoverEvent : getX() " + event.getX() + ", getRawX() " + event.getRawX());
return super.dispatchHoverEvent(event);
}
}
LOG :
--> touching on right side of the view
2024-02-05 14:33:31.430 20982-20982 ANNN com...mple.testandroidaccessibility D onHoverEvent : getX() 903.6035, getRawX() 903.6035 2024-02-05 14:33:31.431 20982-20982 ANNN com...mple.testandroidaccessibility D dispatchHoverEvent : getX() 903.6035, getRawX() 903.6035 2024-02-05 14:33:31.431 20982-20982 ANNN com...mple.testandroidaccessibility D onHoverEvent : getX() 903.6035, getRawX() 903.6035
--> then just double tap. getX() is center of view.
2024-02-05 14:33:40.657 20982-20982 ANNN com...mple.testandroidaccessibility D dispatchTouchEvent : getX() 540.0, getRawX() 540.0 2024-02-05 14:33:40.657 20982-20982 ANNN com...mple.testandroidaccessibility D onTouchEvent : getX() 540.0, getRawX() 540.0 2024-02-05 14:33:40.657 20982-20982 ANNN com...mple.testandroidaccessibility D dispatchTouchEvent : getX() 540.0, getRawX() 540.0 2024-02-05 14:33:40.657 20982-20982 ANNN com...mple.testandroidaccessibility D onTouchEvent : getX() 540.0, getRawX() 540.0 2024-02-05 14:33:40.658 20982-20982 ANNN com...mple.testandroidaccessibility D dispatchTouchEvent : getX() 540.0, getRawX() 540.0 2024-02-05 14:33:40.658 20982-20982 ANNN com...mple.testandroidaccessibility D onTouchEvent : getX() 540.0, getRawX() 540.0 2024-02-05 14:33:40.658 20982-20982 ANNN com...mple.testandroidaccessibility D dispatchTouchEvent : getX() 540.0, getRawX() 540.0
In case of double tap, both getX() and getRaw() is center. But I need the Specific touch point of the view in onTouchEvent().
It would be great If somebody share the knowledge on how it can be achieved. Thank you!!