Android: Zooming EditText Android Issue in translation And Getting Touch event of childView when Placed outside parentView

This the the closest i got to solve above problem's.

PROBLEM 1:

  1. On zooming in the text is blurred

setLayerType(LAYER_TYPE_HARDWARE,null);

set layer type Hardware in the view which has text View. for me i set it in green square view.

  1. pointing on a text is working fine but translating through the text is translating very fast as its translation is multiplied by the scalingFactor
  2. Selecting the text is also having above issue.

For above two: This is a bug in android when you scale a view using the scaleX,scaleY api's the EditText get's event based on the current scale value of parent's.But issue is with the Cursor of editText.

The best solution we got is we wrote our own EditTextView (which extend's TextView).As we checked android framework source code we came to know that android use's PopUpWindow to display cursor on screen.

The source of issue is when we use scaleX and scaleY editText get's scaled even't as it's parent is scaled but as cursor is a PopUpWindow and not a child of EditText so event's are not scaled and above issue occur's

So wrote our own EditText if you see the source code EditText code is not very complex and can be written on our own.And to solve the scaling issue of Cursor, we added our own Cursor PopUpWindow and made it Scale aware.

NOTE: (UPDATE) Check at demo code here customEditText and CustomCursor. Run the project set focus pink focus(BY Android) will come ,wait for few seconds then the black cursor will appear that is the custom cursor. It is a very basic example and we need to add all other edit text Feature's on our own like multi-Select, popUpMenu etc.

PROBLEM 2: if i have a childView which is movable in the parent View then after zooming out if the childView is translated outside the bounds of parentView the events are ceased to capture and the child view becomes untouchable i have tried using TouchDelegate but i don't know how to expand the parentView touch area

This solution is specific to the given problem not a generic one as there can be multiple solution's for this problem. In this case 3 view's are there:

  1. Yellow-parentView of green square View
  2. Cyan-parent of yellow View
  3. Green-ChildView non touchable outside parent

    My Solution is that i used created a callback from green square view to Yellow parent view. Whenever the translation of green square view ended the callback is triggered and in yellow parent i used below code.

override fun eventEnded() {
      setDelegate()
    }


fun setDelegate() {
            val rect = Rect()
            val parent = (this.parent as View) 
            parent.getHitRect(rect)
            val touchDelegate = TouchDelegate(rect, this)
            if (View::class.java.isInstance(editorContainer.parent)) {
                (editorContainer.parent as View).touchDelegate = touchDelegate
            }
    }

The above code translate to : when child view translation is ended check the bound's of parent and update the TouchDelegate accordingly.

As the problem i faced was when i scaled(Zoomed) the view then the View's delegate was not updated so for that also solution is same make a callback from zoomView (parent) to yellowView (childView) onScaleEnded call setDelegate().

When scale changes the hitArea also changes but as per delegate nothing is changed so we need to update the rect of TouchDelegate.

Please feel free to discuss in comment section. If someone has a better solution Really eager to know.As we tried many different solution's but nothing else worked.This is the best i found and i am using above code in production and haven't faced any issue till now.