标签: touch-event

在iOS 5中检测用户对MKMapView的触摸

我有一个MKMapViewViewController,并希望在他/她用这些方法触摸地图时检测用户的手势:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
Run Code Online (Sandbox Code Playgroud)

该应用程序适用于iOS 3,iOS 4,但当我在iOS 5上运行iPhone调试应用程序时,我看到此消息:

Pre-iOS 5.0 touch delivery method forwarding relied upon. Forwarding -touchesCancelled:withEvent: to <MKAnnotationContainerView: 0x634790; frame = (0 0; 262144 262144); autoresizesSubviews = NO; layer = <CALayer: 0x634710>>
Run Code Online (Sandbox Code Playgroud)

并且未达到上述4种方法中的代码.

你知道怎么解决吗?

谢谢.

iphone objective-c mkmapview touch-event ios

6
推荐指数
1
解决办法
3328
查看次数

onInterceptTouchEvent,onTouchEvent仅查看ACTION_DOWN

我有一个顶级ViewGroup,我称它为SliderView,我想在其中检测滑动。这通常可以正常工作,但是一个奇怪的失败仍然存在。

SliderView的本质是重写onInterceptTouchEvent,并且在用户实际滑动后,返回“ true”以防止其他视图占用MotionEvent。这是一段代码:

public class SliderView extends ViewGroup
{
  enum MoveState { MS_NONE, MS_HSCROLL, MS_VSCROLL };
  private MoveState moveState = MoveState.MS_NONE;

  ... other code ...

  public boolean onInterceptTouchEvent(MotionEvent e)
  {
    final int action = e.getAction();
    switch (action & MotionEvent.ACTION_MASK)
    {
      case MotionEvent.ACTION_DOWN:
        moveState = MoveState.MS_NONE;
        break;

      case MotionEvent.ACTION_MOVE:
        if (moveState == MoveState.MS_NONE)
        {
          if (motion is horizontal)
          {
            moveState = MoveState.MS_VSCROLL;
            return true;
          }
          else
            moveState = MoveState.MS_VSCROLL; // let child window handl MotionEvent
        }
        else if (moveState == MoveState.MS_HSCROLL) …
Run Code Online (Sandbox Code Playgroud)

android scrollview touch-event android-linearlayout motionevent

6
推荐指数
1
解决办法
1万
查看次数

如何识别画布上绘制的角色

我正在使用手指画画线,到目前为止,我已经提出以下代码:

 case MotionEvent.ACTION_MOVE:
    //return if touch is in this area of canvas
    if (x<=430 || y<=80 || y>=490) return true;
    //draw path using x and y co-ordinates
    mPath.quadTo(previousPoint.x, previousPoint.y, (x+previousPoint.x)/2,(y+previousPoint.y)/2);
    canvas.drawPath(mPath, paint);
    previousPoint.x = x;
    previousPoint.y = y;
    //invalidate canvas on move
    imageView.invalidate();
    break;
case MotionEvent.ACTION_UP:
    Xend=x;
    Yend=y;
    //validate that is it true?
    if((Xstart>=780 && Xstart<=830) && (Xend>=780 && Xend<=830) && (Ystart>=10 && Ystart<=200) && Yend<=800 && Yend>=300){
    //show toast if correct
    Toast.makeText(getBaseContext(), "Correct", Toast.LENGTH_SHORT).show();
    }else{
    //show toast with XY …
Run Code Online (Sandbox Code Playgroud)

android canvas text-recognition touch-event

6
推荐指数
1
解决办法
1659
查看次数

在EditText中,单击特定文本子集时弹出对话框

找到两个解决方案 - 请参阅选定的答案

当用户点击EditText的某个区域时,我想弹出一个对话框.我使用onClick来捕获点击.这部分工作:用户第一次点击EditText时,弹出软键盘而对话框不弹出.随后的点击会弹出键盘,然后是对话框(键盘会消失).

我怀疑这与EditText获得关注有关.

这是一个代码片段:

public class PrefixEditText extends EditText implements TextWatcher, OnClickListener
{
  public PrefixEditText (Context context)
  {
    super (context);
    setOnClickListener (this);
  }

  @Override
  public void onClick(View v)
  {
    int selStart = getSelectionStart();
    if (selStart < some_particular_pos)
      bring_up_dialog();
  }
}
Run Code Online (Sandbox Code Playgroud)

重要说明:我不想完全禁用正常的EditText行为.我希望用户能够进行区域选择(用于复制和粘贴).我可能仍然希望它获得焦点(因此当具有物理键盘的人使用该应用程序时,我不打破模型).点击可以设置光标位置.因此,覆盖onTouch并阻止EditText中所有onTouch操作的解决方案对我来说不起作用.

更新 我发现了一点.如果EditText正在获得焦点,则会调用onFocusChange而onClick不会.如果它已经有焦点,则onClick被调用而onFocusChange没有.

其次,可以通过调用隐藏键盘

setInputType (InputType.TYPE_NULL);
Run Code Online (Sandbox Code Playgroud)

在onFocusChange中这样做 - 键盘永远不会出现.在onClick中这样做(假设键盘在点击之前被隐藏)显然为时已晚 - 键盘显示然后消失.

下一个尝试的想法是在onTouch期间隐藏键盘.但是,我害怕弄乱那些代码 - 似乎无论我想出什么都会对EditText的未来版本非常脆弱.

对此有何看法?

android onclick touch-event android-edittext

6
推荐指数
1
解决办法
3864
查看次数

通过单击/触摸外部删除片段:

我有一些RelativeLayout动态使用代码添加和删​​除的片段.其中一个片段是a ListFragment,并且与其他具有Close和Save Buttons的片段相反,这个片段只包含一个列表.

我的目标是通过在活动中的任何位置单击它以外来关闭/删除此片段.

我找到了以下代码:

@Override
public boolean onTouchEvent(MotionEvent event) {
    // I only care if the event is an UP action
    if (event.getAction() == MotionEvent.ACTION_UP) {
        // create a rect for storing the window rect
        Rect r = new Rect(0, 0, 0, 0);
        // retrieve the windows rect
        this.getWindow().getDecorView().getHitRect(r);
        // check if the event position is inside the window rect
        boolean intersects = r.contains((int) event.getX(), (int) event.getY());
        // if the event is not inside then we …
Run Code Online (Sandbox Code Playgroud)

android touch-event android-fragments

6
推荐指数
1
解决办法
4265
查看次数

UIView动画可以防止触摸事件?

在Objective-C上,当动画在UIView上开始时,不接受任何触摸交互.我们怎么办呢?

objective-c uianimation touch-event ios

6
推荐指数
1
解决办法
2552
查看次数

div中的TouchEvent/MouseEvent本地位置

我一直在开发一个HTML5应用程序,现在我面临一个相当困难的问题,在适当的坐标系中在目标div内获得适当的局部触摸/鼠标位置.

StackOverflow上有很多解决方案,但事情并不那么容易.

"经典"解决方案是计算目标偏移量并从pageX和pageY位置减去它.许多人使用JQuery offset函数,但在页面滚动并包含嵌套的缩放div时,我们在iOS上发现它有bug(1.8.3).

情况更复杂,因为不仅有嵌套的缩放div(CSS zoom属性),还有不同CSS转换(x和y转换)的图层.

最后,我们已经写我们自己的函数来计算在目标div的,本地的鼠标/触摸位置(使用WebKitCSSMatrix,MSCSSMatrix等...).它的工作"几乎"很好,但在某些情况下仍然不完美 - 特别是当有嵌套的缩放div时.

所以我的问题是,考虑到上述要求,是否有一些通用的解决方案/库来计算目标div内的局部触摸/鼠标位置?

谢谢.

所有人都过得愉快...

javascript position mouseevent touch touch-event

6
推荐指数
1
解决办法
1434
查看次数

带有子视图的ScrollView,如何有条件地拦截滚动

我有一个容器ViewGroup,可以把它的屏幕ScrollView.这个容器视图托管了许多其他Views的调用它们的小部件,其中一些有兴趣阻止ScrollView滚动并使用MotionEvent自己(例如一个pannable图像)

我无法弄清楚要使用的正确的事件拦截策略.ScrollView始终在子项之前处理事件,或者子项处理事件但是scrollview已禁用.

我读过关于getParent().requestDisableInterceptTouchEvent()在子视图中发出这个视图是否想要捕获事件,但是onTouchEvent没有调用它们,我想是因为ScrollView事先已经吞没了事件.我想我有2级层(容器+小部件)的事实阻止了它的工作,我想容器ViewGroup必须在这里发挥重要作用,但我无法弄清楚哪一个......

我是否可以在ScrollView's onInterceptTouchEvent级别上知道容器上的哪个小部件viewGroup被触摸以决定是否应该拦截?

要么...

如何才能获得事件中的"小部件"图层,ViewGroupScrollView以便我可以调用getParent().onRequestDisableInterceptTouch() ......或者是它getParent().getParent().onRequestDisableInterceptTouch()

提前致谢

我已阅读相关问题,但没有运气...... 在ScrollView Android中处理触摸事件

android touch scrollview touch-event

6
推荐指数
1
解决办法
9838
查看次数

处理触摸事件 - onInterceptTouchEvent和onTouchEvent

我希望能够在屏幕上的任何位置滑动以调用某个功能.但我也有Buttons,Linear Layouts因为我希望能够点击.如果我刷上Button我想 onInterceptTouchEventIntercept在调用ButtononTouchEvent和进行刷卡操作.如果我只是点击一个Button我不希望onInterceptTouchEvent被调用.相反,我希望ButtononTouchEvent要调用和执行Button click

但是当我尝试实现时,我会遇到错误onInterceptTouchEvent.

这是我的代码:

public class Game extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.game_activity);

   //other code....
}
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            swipeScreen(); //if action recognized as swipe then swipe
            break;
        case MotionEvent.ACTION_MOVE:
            float x = event.getX();
            float …
Run Code Online (Sandbox Code Playgroud)

android onclick touch touch-event

6
推荐指数
1
解决办法
1万
查看次数

由于触摸事件上的类别切换/高度更改而错误放置了可点击区域

如果您切换放置在上方的元素的高度,则触摸设备上有关于链接的可点击区域的奇怪行为.如果您运行以下代码段(例如,将其保存在本地并使用chrome来模拟触摸事件),您会注意到#mylink在某些情况下您没有点击红色链接区域的哈希值会被添加到网址中.有时你点击红色区域,它不会被添加.

例如

  • 如果单击上部灰色区域(前200px),灰色区域将切换高度.=>好的.
  • 如果单击增强的较低灰色区域(200px - 400px),#mylink则会将其添加到URL中,就像您单击红色链接区域一样.=>为什么?
  • 如果单击上部红色区域(前200px,灰色区域最小化),#mylink则不会添加到URL.=>为什么?
  • 如果单击较低的红色区域(最后200px,灰色区域增强),#mylink则不会添加到URL.=>为什么?

<html>
<head>
	<style type="text/css">
		.test {
			background: grey;
			height: 200px;
		}

		.test.is-visible {
			height: 400px;
		}

		.link {
			height: 600px;
			display: block;
			background: red;
		}
	</style>
	<script type="text/javascript">
	  (function() {
	    window.addEventListener( 'touchstart' , function() {
	    	document.getElementsByClassName("test")[0].classList.toggle('is-visible');
	    });	
		})();
	</script>
</head>

<body>
	<div class="test">
		Click the grey area. Element enhances and minimizes itself. Now click on the lower half of the enhanced grey area (if …
Run Code Online (Sandbox Code Playgroud)

html javascript css touch touch-event

6
推荐指数
1
解决办法
325
查看次数