基本上,我有一个8000px到8000px的应用程序.我们可以放大以查看特定部分,例如收音机,或者我们可以缩小以查看所有内容.
汽车的每个部件都是一个控制器,我们可以用手指操作,双触摸或多点触控显示器.
我的问题是:对于操作控件,例如音量按钮,用户需要像现实生活中一样移动鼠标,因此使用圆形运动.使用鼠标,一切都很完美,它可以毫不拖延地立即响应.我使用OnMouseLeftButtonDown,OnMouseMove等.通过触摸,计算机似乎很难获得触摸位置并且存在巨大的延迟,尤其是当用户同时用2个手指移动2个不同的按钮时.我使用OnTouchDown,OnTouchMove等...
鼠标和触摸之间的唯一区别是当我们需要获取位置时,使用鼠标:(e是MouseButtonEventArgs)
Point currentPosition = e.GetPosition(this);
Run Code Online (Sandbox Code Playgroud)
使用Touch我使用:(e是TouchEventArgs)
Point currentPosition = e.GetTouchPoint(this).Position;
Run Code Online (Sandbox Code Playgroud)
在此之后的一切都是一样的.
我不知道是不是因为我在我的应用程序中有太多的控制权(超过5000我们可以操作,但当我们只放大2控制它是同样的事情)或因为它真的很难让计算机得到触摸事件的位置....
有人可以帮我弄这个吗?我需要找到一个消除滞后的解决方案.
我在NEC 2490WUXi2屏幕上使用Visual Studio 2010,Blend 4,.NET 4.0 Windows 7 64位7 Gb RAM Xeon 2.13 Ghz,2核,8线程屏幕:ELO技术
一个有利的结果是防止这种例外,最好是,或至少优雅地处理它.
我在 Microsoft代码中抛出一个异常.最重要的是,抛出异常的方法是System.Windows.Input.Manipulations.ManipulationSequence.ProcessManipulators
我在Microsoft Reference Source中找不到的.
抛出异常时,我可以在它引用的Call Stack窗口中看到一行Windows.Input.Manipulations.ManipulationProcessor2D.ProcessManipulators
,这在Microsoft Reference Source中确实存在.
但正如您所看到的,它没有一个名为的兄弟类ManipulationSequence
.
至于异常本身,它System.Argument.OutOfRangeException
的值是Timestamp values must not decrease. Parameter name: timestamp Actual value was 6590630705479.
抛出异常的方法的完全限定签名是 System.Windows.Input.Manipulations.ManipulationSequence.ProcessManipulators(long timestamp, System.Collections.Generic.IEnumerable<System.Windows.Input.Manipulations.Manipulator2D> manipulators, System.Windows.Input.Manipulations.ManipulationSequence.ISettings settings)
似乎宇宙中的另一个人遇到了这个问题,但根据唯一的评论它无法复制.
我MediaElement
在画布上有6个对象在操作时都运行视频,所以我觉得它可能与CPU被征税和减速有关,可能会使时间戳无序地发送到方法中(尽管使用Image
而不是MediaElement
)时会出现同样的问题.异常偶然发生,有时它会在几秒钟之后乱搞对象,有时可能需要几分钟或更长时间来操作对象.
我在其中执行实际操作的代码ManipulationDelta
如下所示:
//Get current values to manipulate
TransformGroup group = (TransformGroup)element.RenderTransform.Clone();
TranslateTransform translate = (TranslateTransform)group.Children[0].Clone();
ScaleTransform scale = (ScaleTransform)group.Children[1].Clone();
RotateTransform rotate = (RotateTransform)group.Children[2].Clone();
//...does manipulations on each by …
Run Code Online (Sandbox Code Playgroud) 我在市场上有一个应用程序,我想为新手机更新它.旧的iPhone只支持5个同时触摸,而iPad支持10个.我想知道新手机现在是否也支持10个.我搜索了Google的文档,但我找不到具体的数据.
我对cocos2D非常熟悉(已经使用它超过1年了)我遇到了一个问题multitouch
- 我的游戏 - multitouch
.
我拥有的:
[glView setMultipleTouchEnabled:YES]
在我的代表中.一个playscene
不实现触摸的.
添加到playcene的许多对象(我自己的,继承CCLayer).
这些对象实现了触摸并且是目标协议的委托.
[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
在cocos2D的触摸测试中使用了相同的架构并且它正在工作.唯一的区别是它们使用CCSprite
而不是CCLayer
作为对象的父类.
有没有人有任何想法?
我需要在电子中设置UserAgent以包含touch
标志,因为我正在编写触摸屏应用程序,它似乎不会自动检测到它在触摸屏上运行.
任何帮助都会很好,我已经尝试在BrowserWindow.loadURL选项参数中设置它.
如何在iPhone上实现捏合手势?我熟悉在iPhone上使用触摸事件,但我非常懒,并且不想重新发明像PINCH手势那样普遍的东西...源代码或其链接会有所帮助.
在iPhone,iPod touch和(可能是)iPad上,Apple 通过Mobile Safari中的JavaScript提供多点触控事件处理功能.我知道Nexus One最近通过更新添加了多点触控支持,我相信webOS也支持多点触控.Android 2.1和/或webOS是否可以在浏览器中访问多点触控,或者这是Apple目前独有的设备?
我可以简单地模拟单个触摸 - 在我的测试中点击,滑动,按住等,但完全坚持使用Android 2.2在HTСDesire上模拟多点触控.
请问您能告诉我,如何重现事件链以测试多点触摸?
我想我需要使用一些棘手的MotionEvent,如MASK或类似的东西,但不知道如何做到这一点.
我在这里找到了转载缩放事件的转储:http: //www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch- ?事件/ 1775 =标签mantle_skin;内容
1. event ACTION_DOWN[#0(pid 0)=135,179]
2. event ACTION_MOVE[#0(pid 0)=135,184]
3. event ACTION_MOVE[#0(pid 0)=144,205]
4. event ACTION_MOVE[#0(pid 0)=152,227]
5. event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=153,230;#1(pid 1)=380,538]
6. event ACTION_MOVE[#0(pid 0)=153,231;#1(pid 1)=380,538]
7. event ACTION_MOVE[#0(pid 0)=155,236;#1(pid 1)=364,512]
8. event ACTION_MOVE[#0(pid 0)=157,240;#1(pid 1)=350,498]
9. event ACTION_MOVE[#0(pid 0)=158,245;#1(pid 1)=343,494]
10. event ACTION_POINTER_UP(pid 0)[#0(pid 0)=158,247;#1(pid 1)=336,484]
11. event ACTION_MOVE[#0(pid 1)=334,481]
12. event ACTION_MOVE[#0(pid 1)=328,472]
13. event ACTION_UP[#0(pid 1)=327,471]
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
我试图在我的应用程序中实现多点触控时,我以某种方式得到意想不到的结果.我永远不会获得多个指针的数据.我的手机上的多点触控确实有效,因为我可以使用GestureDetector捏缩放浏览器并检测捏合手势,但action=0 pointers=1
无论我用多少手指触摸屏幕,下面的样本都会打印出来.
我需要在配置/ AndroidManifest或Activity创建中有什么东西
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.ll1).setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d("TAG","onTouch action="+event.getAction()+" pointers="+event.getPointerCount());
return false;
}
});
}
Run Code Online (Sandbox Code Playgroud)
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
canvas.addEventListener('touchstart', function(event) {
console.log('start');
});
Run Code Online (Sandbox Code Playgroud)
当我同时用两根手指敲击时,我有以下输出(因为打印两次很酷):
I/SnapScrollController(26508): setSnapScrollingMode case-default no-op
I/chromium(26508): [INFO:CONSOLE(69)] "start", source: file:///android_asset/index.html (69)
I/chromium(26508): [INFO:CONSOLE(69)] "start", source: file:///android_asset/index.html (69)
Run Code Online (Sandbox Code Playgroud)
但是当我同时使用两个以上的手指时,我的结果相同,我做错了什么?我被期待的日志"开始"与我使用的手指一样多次.
在另一边touchmove
,touchend
效果很好.
我在这里上传了代码
multi-touch ×10
android ×4
iphone ×4
javascript ×3
c# ×2
touch ×2
wpf ×2
.net ×1
chromium ×1
electron ×1
instruments ×1
ios ×1
performance ×1
pinch ×1
testing ×1
webos ×1
webview ×1
windows ×1
xcode ×1