- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的问题与 android 功能有关,用于缩放由多个 subview 组成的父 View 。
ZoomView->ParentView->[多个 subview ]
我正在研究 Demo project缩放 subview 并无限平移。缩放可根据需要完美运行。
问题 1:但是,如果 View 中有一个 EditText,并且我尝试放大它,那么我将面临以下问题。
放大后文字模糊
指向文本工作正常,但翻译文本是翻译速度非常快,因为它的翻译乘以比例因子
选择文本也有上述问题。
尝试运行 Demo如果从上面不清楚,可以理解问题
我尝试了两种方法来缩放 View 的内容,但这两种方法都出现了同样的问题。
我的演示项目的层次结构缩放 View (UML 图)
基本问题是当 View 缩放到某个值时将光标放在正确的位置。
我已经提到了这个thread
问题 2:如果我有一个可以在父 View 中移动的 subview ,那么在缩小之后如果 subview 被翻译到父 View 的范围之外,事件将停止捕获并且 subview 变得不可触摸我试过使用 TouchDelegate 但我不知道如何扩展 parentView 触摸区域。 Code reference Thread
scale is 1 the area touch area is equal to screen for parentView and ZoomView
但是当比例因子不等于 1 时,父级的触摸区域小于(放大)显示的 ZoomView
黄色-parentView触摸区域
青色-缩放 View 触摸区域
绿色-ChildView 触摸区域
截图在这里
注意:这是我在 StackOverflow 上的第一个问题,所以如果需要进行一些编辑,请提出建议。
最佳答案
这是我最接近解决上述问题的。
问题 1:
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.
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.
问题 2: 如果我有一个可以在父 View 中移动的 subview ,那么在缩小之后如果 subview 被翻译到父 View 的范围之外,事件将停止捕获并且 subview 变得不可触摸 我试过使用 TouchDelegate 但我不知道如何扩展 parentView 触摸区域
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:
- Yellow-parentView of green square View
- Cyan-parent of yellow View
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.
欢迎在评论区讨论。如果有人有更好的解决方案真的很想知道。因为我们尝试了许多不同的解决方案,但没有其他解决方案。这是我找到的最好的解决方案,我在生产中使用上面的代码,直到现在还没有遇到任何问题。
关于Android:在翻译中缩放 EditText Android 问题并在放置在 parentView 外部时获取 childView 的 Touch 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49150313/
/** Called when the user clicks the Send button */ public void sendMessage(View view) { Intent i
我已经编写了 EditText 的子类。这是那个子类: package com.package.foo; import android.content.Context; import android.
我有一个用户名和密码 XML 段 我希望当用户名字段到达第9个字符时光标焦点自动跳转到密码字段 我在看 Focus next textview automatically并且正在尝试: fin
我知道这类问题被问过很多次。但仍然没有人给出完美的答案。 我有问题: 我想从 EditText1 ** 移动到另一个 **EditText2 。我已经检测到editText1,但如何将光标移动到edi
我有 2 个 EditText(myEditText1 和 myEditText2) 我需要触摸 myEditText1 1.做一些生意[这里没有问题,需要申请的业务] 2. 然后请求焦点到 myEd
我想在用户输入 EditText 时将文本放入我的应用程序中的某个字符串中,并使用它在 Activity 中生动地显示它(在不同的 View 中......) - 就像谷歌的实时/即时搜索一样...
当我将文本插入到我的 EditText 字段时,文本本身与 EditText 的行之间存在异常间隙。这是我终端的打印屏幕,您可以在其中看到我正在谈论的这个差距,它被标记为红色。 我试过文本对齐和引力但
我的应用程序需要帮助。这是我的相对布局的 xml 文件,我需要在按下 Enter 键后跳转到下一个编辑文本。但是有一个问题,如果我正在写入 editTextKm 并按 Enter 键,它会跳转到 ed
Hello All 我已经将 onLongClickListener() 用于我的 EditText View ,但是每当我长时间单击 View 时,就会出现一个弹出窗口,不允许我执行我的操作onLo
EditText 快把我们逼疯了!真的! 我们的应用程序登录屏幕出现问题。它包含两个 EditText,但只有第一个(用户名)获得焦点,通过 SoftKeyboard 仅在触摸/单击用户名 EditT
如何在kotlin中获取editText并用toast显示。 var editTextHello = findViewById(R.id.editTextHello) 我试过了,但显示对象 Toast
我一直在浏览各种线索来解决这个问题,但我仍然感到困惑。当我将“adjustPan”应用于底部具有 EditText 的 Activity 时,UI 会正确向上推,但编辑文本会被底部的键盘稍微遮挡。经过
我有两个类:a 和 b。在类 a 中,我有一个线程,当变量 x 的值小于 1000 时,它会将变量 x 加一。在类 b(Activity 类)中,我有一个名为 ed 的 EditText。每当a类中x
今天我遇到了一个非常有趣的情况。 假设: EditText 从 XML 实例化。 EditText editText; editText = findViewByID(R.id.editT
有谁知道我的代码出了什么问题,我正在尝试比较编辑文本字段中的输入,以确保它们在创建帐户之前具有相同的值。 //compare the fields contents if(editT
制作一个简单的卡路里转换器。 这是图片中的问题。 我使用的是 Genymotion 模拟器。 这是我遇到问题的屏幕部分: 当我单击 EditText 数字字段时,数字键盘会出现 但是我必须单击下一个箭
全部 - 我试图隐藏 EditText B、C,直到 EditText A 中至少有一个字符。我尝试过使用文本观察器... EditText editText = (EditText) findVie
我正在努力完成 “Sam 的 24 小时 Android 应用程序开发技术”,但在某些时候我的昵称和电子邮件设置停止正确保存。它现在根本不保存昵称并将电子邮件保存到两者。我做了什么导致这个,我该如何解
我有一个 SharedPreferences,它保存来自一个 Activity 的 EditText 输入并在另一个 Activity 中显示字符串值。 当我在 EditText 字段中输入内容并按下
这一定是一个我可能会再次忽略的简单问题。这是我的问题我的 string.xml 上有一个字符串数组 Alabama Florida Los Angeles Virgi
我是一名优秀的程序员,十分优秀!