WebSettings中有一些与缩放相关的方法:
我发现他们在某些设备上的工作方式不同 例如,在我的Galaxy S上,默认情况下启用缩放功能,但在LG P500上它被禁用(现在我不知道如何启用仅捏缩放,但隐藏缩放按钮).
在P500上,当我打电话时,setBuiltInZoomControls(true)
我得到这两个变体工作(多点触控和按钮).
如何在LG P500等设备上启用多点触控缩放和禁用缩放按钮?(另外,我知道HTC设备上存在同样的问题)
更新:这里几乎是解决方案的完整代码
if (ev.getAction() == MotionEvent.ACTION_DOWN ||
ev.getAction() == MotionEvent.ACTION_POINTER_DOWN ||
ev.getAction() == MotionEvent.ACTION_POINTER_1_DOWN ||
ev.getAction() == MotionEvent.ACTION_POINTER_2_DOWN ||
ev.getAction() == MotionEvent.ACTION_POINTER_3_DOWN) {
if (multiTouchZoom && !buttonsZoom) {
if (getPointerCount(ev) > 1) {
getSettings().setBuiltInZoomControls(true);
getSettings().setSupportZoom(true);
} else {
getSettings().setBuiltInZoomControls(false);
getSettings().setSupportZoom(false);
}
}
}
if (!multiTouchZoom && buttonsZoom) {
if (getPointerCount(ev) > 1) {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
此代码位于我onTouchEvent
重写的WebView方法中.
我最近发现Android 2.0 SDK通过MotionEvent类中的新功能支持多点触控.您可以在检索触摸属性时指定指针索引,并且在屏幕上有多个手指的情况下,应该提供多个指针.
不幸的是,我只有一个G1来测试,它运行Android 1.5而不是2.0.
有没有办法在没有2.0设备的情况下测试多点触控?在iPhone模拟器中,您可以按住选项和移位选项分别执行两个手指捏合和两个手指拖动.Android模拟器中是否有类似的功能?这是我应该期待在未来看到的东西,还是我应该吮吸它并购买新的测试手机?
仅从android doc我真的不明白ACTION_UP和ACTION_POINTER_UP之间的区别. http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_DOWN
基本上我想捕获一个手指从屏幕释放时的事件(即使另一个手指仍可能触摸它)
谢谢!
我成功地实现了捏缩放视图.但是,这种观点并没有将自己定位在我希望的位置.对于带有iPad的stackoverflowers,我希望我的视图能够像iPad Photos.app一样居中:当你捏合和缩放相册时,照片会出现在正在扩展的视图中.该视图大致以第一个手指的右上角和另一个手指的左下角手指为中心.我将其与平底锅识别器混合,但这样用户总是需要捏,然后平移以进行调整.
这里有如此图形的解释,我可以发布我的应用程序的视频,如果不清楚(没有秘密,我正在尝试重现iPad的Photos.app ...)
因此,对于手指的初始位置,开始缩放:
这是现在的实际"缩放"框架.方块较大,但位置在手指下方
这是我想要的:相同的大小,但不同的origin.x和y:
(对不起我糟糕的Photoshop技能^^)
我知道在iphone模拟器中使用多点触控输入,在使用鼠标时按住OPT键.将看到两个虚拟指尖.并移动鼠标以进行捏合.我的问题是在模拟器中,这两个指尖只会在中心一直重叠,如果我想要移动一根手指和另一根手指固定在某一点,而是将两个指尖移动到一起如何在iphone模拟器中实现这一点?在其他我希望这两个虚拟手指可以在屏幕上的任何位置重叠但不仅仅是中心
在iOS中,无论如何都要防止同时触摸包含多个按钮(兄弟姐妹)的UIView?例如,可以在两次触摸的同时轻敲两个并排的非重叠按钮.
我的应用程序有几个触发不同事件的按钮.用户不应该按住几个按钮.无论如何,按住几个按钮会崩溃应用程序.
所以,我试图在我的应用程序中禁用多点触控.
我在所有xib文件中取消选中"Multiple Touch",并且据我所知,属性'multipleTouchEnabled'和'exclusiveTouch'控制视图是否使用多点触控.所以在我的applicationDidFinishLaunching中,我把它放在:
self.mainViewController.view.multipleTouchEnabled=NO;
self.mainViewController.view.exclusiveTouch =YES;
Run Code Online (Sandbox Code Playgroud)
在我的每个视图控制器中,我都将它放在viewDidLoad中
self.view.multipleTouchEnabled=NO;
self.view.exclusiveTouch=YES;
Run Code Online (Sandbox Code Playgroud)
但是,它仍然接受多次触摸.我可以做一些事情,比如在触发事件后禁用其他按钮,但这将是一个丑陋的黑客.当然有一种方法可以正确禁用多点触控?
我有一个触摸事件异常,导致我的游戏在平板电脑上崩溃(或更具体地说,蜂窝)...我的手机上的游戏工作正常,我还没有听说过任何没有运行Android 3.0的人或更高.这是相关的日志信息......
E/AndroidRuntime(26487): java.lang.IllegalArgumentException: pointerIndex out of range
E/AndroidRuntime(26487): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
E/AndroidRuntime(26487): at android.view.MotionEvent.getX(MotionEvent.java:1549)
E/AndroidRuntime(26487): at kieran.android.asteroids.GameUI.onTouchEvent(GameUI.java:665)
E/AndroidRuntime(26487): at android.view.View.dispatchTouchEvent(View.java:4616)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
Run Code Online (Sandbox Code Playgroud)
......这是调用它的代码.对我来说似乎很好,但也许蜂窝中有一个尚未修复的错误?上面日志中的行号665对应于该float x = event.getX(id);
行.它必须与我获取which
变量的方式有关吗?但它在手机/ 2.3及更低版本上运行良好......
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
if(actionCode == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_UP) {
int which = action >> MotionEvent.ACTION_POINTER_ID_SHIFT;
int id = event.getPointerId(which);
float x = event.getX(id); …
Run Code Online (Sandbox Code Playgroud) 我有几个关于活动的观点,用户想要连续快速触摸,我使用TouchListener
和处理捕获这些触摸MotionEvent.ACTION_DOWN
.但是,如果用户使用双手,则在用户拉出上一根手指之前,下一个视图很可能会被"触摸".在这种情况下,将MotionEvent.ACTION_MOVE
针对第一个视图而不是MotionEvent.ACTION_DOWN
第二个视图的期望触发a .
有没有办法解决或阻止这种行为?我已尝试使用MotionEvent.ACTION_UP
并删除事件监听器来调度新事件但似乎都不起作用.
我在 Jetpack Compose 中实现了一列按钮。我们意识到可以一次单击多个项目(例如用多个手指),并且我们想禁用此功能。
是否有一种开箱即用的方法可以通过使用父列修饰符来禁用对子可组合项的多个同时单击?
这是我的 UI 当前状态的示例,请注意有两个选定的项目和两个未选定的项目。
这是一些如何实现的代码(精简)
Column(
modifier = modifier
.fillMaxSize()
.verticalScroll(nestedScrollParams.childScrollState),
) {
viewDataList.forEachIndexed { index, viewData ->
Row(modifier = modifier.fillMaxWidth()
.height(dimensionResource(id = 48.dp)
.background(colorResource(id = R.color.large_button_background))
.clickable { onClick(viewData) },
verticalAlignment = Alignment.CenterVertically
) {
//Internal composables, etc
}
}
Run Code Online (Sandbox Code Playgroud) android multi-touch multi-select kotlin android-jetpack-compose
multi-touch ×10
android ×6
iphone ×3
ios ×2
emulation ×1
exception ×1
ipad ×1
java ×1
kotlin ×1
multi-select ×1
objective-c ×1
uikit ×1
uiview ×1
zoom ×1