Articles of touch

Android ACTION_MOVE阈值

我正在编写一个应用程序,涉及使用一个手指在屏幕上书写,或最终使用手写笔。 我有那部分工作。 在ACTION_DOWN上,开始绘图; 在ACTION_MOVE上,添加线段; 在ACTION_UP上,完成一行。 问题是在ACTION_DOWN之后,显然指针需要移动距离它开始的位置超过10个像素(基本上是起始点周围的20×20框)才能开始发送ACTION_MOVE事件。 离开盒子后,移动事件都非常准确。 (我通过测试得出10像素的东西。)因为这是用于书写或绘图,10像素是一个相当大的损失:取决于你试图写的小,你可能会失去第一个字母或两个。 我还没有find任何关于它的信息 – 只有一两个论坛上的post,比如http://android.modaco.com/topic/339694-touch-input-problem-not-detecting-very-small -movements / page_ pid _1701028#entry1701028 。 它似乎出现在某些设备或系统上,而不是其他设备或系统上。 但是,当你拥有它时,没有关于如何摆脱它的想法。 我正在使用带有Android 3.1的Galaxy Tab 10.1。 我尝试了几种不同的东西来试图摆脱它:我已经尝试将事件的坐标设置为其他东西,看看我是否可以欺骗它以为光标位于不同的位置; 我尝试用更改的coords重新调度事件(我的处理程序对新点做出反应,但仍然没有响应10像素半径的移动。)我在源代码中搜索了对该效果的任何引用,并且没有find(虽然我认为它来自不同版本的Android – 3.1的代码尚未发布,是吗?)我已经搜索了查询指针当前状态的方法,所以我可以只有一个计时器捕获更改,直到指针超过阈值。 没有相应的移动事件,找不到任何获得指针坐标的方法。 没有任何效果。 有没有人知道这件事,或有任何想法或解决方法? 谢谢。 – 更新:拖放事件显示相同的阈值。

有谁知道getevent的输出意味着什么?

我试图找出adb shell中getevent命令的输出格式。 例如,输出如下所示: adb shell getevent -t | grep event1 -t标志提供时间戳,grep用于仅将消息过滤到触摸屏的事件。 22779-197145:/ dev / input / event1:0003 003a 00400001 22779-197999:/ dev / input / event1:0003 0039 82c30a97 22779-218477:/ dev / input / event1:0003 003a 00390001 22779-219301:/ dev / input / event1:0003 0039 82c30aa4 22779-230623:/ dev / input / event1:0003 003a 002f0001 22779-231416:/ dev / input […]

如何扩展视图的触摸区域

我有一个垂直的LinearLayout 。 它应该作为一个快速跳跃栏。 因此宽度非常小,高度几乎匹配整个屏幕高度。 当我触摸它并在里面移动时,一切都很好。 这意味着,我的onTouchEvent()被调用,我可以得到(并跟随)手指的位置。 但由于条形不是很宽,因此用户可以轻松地漂移在该视图之外。 因此,即使在视图之外,也有必要让用户继续运动。 实际上和ListView一样。 我不知道为什么ListView的onTouchEvent()即使在ListView之外也被调用,但不是在我的LinearLayout情况下。 我将其追溯到dispatchTouchEvent() 。 这里的情况是相同的,总是为ListView调用方法(即使在外部),但不是在LinearLayout情况下(在外面移动时)。 如果有人能给我一个提示,我会很高兴。 非常感谢! 贝恩德

Android移动视图触摸事件

我想在我的布局中移动两个不同的视图,以便用户可以像他的愿望一样显示它。 到目前为止,我已经制作了以下代码来处理触摸事件: this.viewEvent.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { final int y = (int) event.getRawY(); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams(); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: element.setEventY(y – params.topMargin); break; case MotionEvent.ACTION_UP: viewGroup.invalidate(); break; case MotionEvent.ACTION_POINTER_DOWN: case MotionEvent.ACTION_POINTER_UP: break; case MotionEvent.ACTION_MOVE: params.topMargin = y – element.getEventY(); params.bottomMargin = screenHeight – […]

Android浏览器:touchcancel被解雇了,touchmove有防止默认

我正在尝试构建一个网页,用于感知用户的触摸,并沿着canvas拖动和对象。 所以我做的是这样的: var touchStart = function(e) { e.preventDefault(); // Do stuff } var touchMove = function(e) { e.preventDefault(); console.log(“Touch move”); // Move objs } var touchEnd = function(e) { e.preventDefault(); console.log(“Touch start!”); // clean up stuff } var touchCancel = function(e) { e.preventDefault(); // Oh NO touch cancel! console.log(“Touch cancel!”); } bindElemOrig.addEventListener(‘touchstart’, touchStart, false); bindElemOrig.addEventListener(‘touchmove’, […]

如何判断android的长触?

我正在寻找一种方式,当用户长时间触摸一个mapview(比方说1000ms),我可以做一些特定的动作。 我将如何判断用户长时间触摸mapsview(或任何视图)的时间。 这将类似于Android谷歌地图应用程序,当你长时间触摸,它会带来气球覆盖项目。 编辑已添加 mapView.setOnLongClickListener(new View.OnLongClickListener() { public boolean onLongClick(View v) { Toast.makeText(mapView.getContext(), “Hello 123”, 2000); return false; } }); 以上不起作用……任何想法为什么? 编辑已添加 这就是我现在正在尝试的,但它似乎不起作用,即使我只按手机,它说这个事件是一个action_move, 我在MapActivity中使用内部类 private long startTime=0; private long endTime=0; class MapOverlay extends Overlay { @Override public boolean onTouchEvent(MotionEvent ev, MapView mapView) { if(ev.getAction() == MotionEvent.ACTION_DOWN){ //record the start time startTime = ev.getEventTime(); Log.d(“LC”, “IN […]

无论如何从视图对象中删除onTouchListener?

我有一个webview的触摸式监听器,但它对webview的function有不良影响,所以我想知道在最初的交互之后是否还有移除触摸监听器?

在视图的Ontouch方法中单击触摸检测

我在自定义视图的ontouch方法中需要单点触摸检测。 我尝试在ACTION-DOWN和ACTION-UP中获取x和y值,在ACTION-UP中我给出了一个条件,即如果ACTIONDOWN和ACTION-UP中的X和Y的值相等,则将其作为单击。 我的代码如下 @Override public boolean onTouchEvent(MotionEvent ev) { if (!mSupportsZoom && !mSupportsPan) return false; mScaleDetector.onTouchEvent(ev); final int action = ev.getAction(); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: { final float x = ev.getX(); final float y = ev.getY(); mLastTouchX = x; //here i get x and y values in action down mLastTouchY = y; […]

为什么触摸事件会破坏我的Android帧速率?

我正在为Android开发游戏。 它有很多事情发生,但运行得相当顺利。 当然,直到用户触摸屏幕。 当他们触摸它时, onTouchEvent被调用(使用action = ACTION_MOVE , x = 0和y = 0 )大约每10毫秒调用一次似乎相当高的优先级,因为它绝对会消除帧速率。 一旦触摸结束,帧速率就会恢复到良好状态。 我试过了 像往常一样让onTouchEvent处理游戏输入 让onTouchEvent返回true 没有实现onTouchEvent 这三种情况都存在问题。 有没有人遇到过这个? 有没有办法降低生成ACTION_MOVE事件的速率,或者确保它们仅在实际移动时生成,或者使用仅获取触摸当前位置的轮询方法? 或者甚至只是一种完全禁用它的方法?

RecyclerView + CardView +触摸反馈

当有人在RecyclerView内部时,有没有人解决了没有触摸反馈的CardView之谜? 我有一个带有一堆CardViews(一个CardList )的RecyclerView 。 当我点击任何CardView时,我开始另一个活动。 这工作得很好,但是当我点击CardView时,我看不到任何触摸反馈。 及时,我已经使用以下方法配置了我的CardView(XML): android:clickable=”true” android:background=”?android:selectableItemBackground” 谢谢!