标签: touch-event

jQuery(Swipe vs. Touch)pageX和pageY一直返回0

我在iPhone上玩touchstart和touchend事件.我构建了一个具有div的示例页面,如果您触摸它并滚动页面,它应该返回开始和结束位置的y坐标.

链接:http://jsbin.com/ibemom/2

jQuery:

var touchStartPos;

$('.theDiv')
  .bind('touchstart', function(e){
    touchStartPos = e.pageY;
  })
  .bind('touchend', function(e){
    alert(touchStartPos + ' | ' + e.pageY)
  })   
Run Code Online (Sandbox Code Playgroud)

但是,当我在iPhone上加载该页面时,警报会将两个值都报告为零.有人看到我有什么问题吗?

更新:

我偶然发现了jQuery Mobile项目中的这段代码:https://github.com/jquery/jquery-mobile/issues/734

它的评论突出:

 // (in iOS event.pageX and event.pageY are always 0 )
Run Code Online (Sandbox Code Playgroud)

它没有说明为什么会这样,但至少我发现其他人看到了同样的事情.将挖掘该页面上的示例代码以查看解决方案是否存在.

更新II:

好吧,在查看上面链接中的示例代码后,看起来这将返回一个实际值:

e.originalEvent.touches[0].pageY
Run Code Online (Sandbox Code Playgroud)

问题是,我现在意识到这不是我需要的.它将我附加事件的对象触摸区域的Y偏移返回到与HTML文档相关的...而不是浏览器窗口.

我的目标是弄清楚触摸开始的位置和结束位置......然后比较值.如果它们有点不同,那么我们就会进行滑动...而不是触摸.

更新III:

我也找到了这些例子的参考:

e.originalEvent.touches[0].pageX

event.targetTouches[0].pageY
Run Code Online (Sandbox Code Playgroud)

虽然我似乎无法让那些工作.两者都返回未定义的错误.

更新IV:

看起来一种解决方案是跟踪文档本身的offset().我可以将touchend事件应用于文档,然后检查它的偏移量.

这个问题是我的touchend事件将首先触发我页面上的元素,然后它会在文档上触发它(冒泡).因此,在我需要弄清楚如何对象touchend事件之前,我无法确定它是触摸还是滑动.

还在思考这一个......

jquery touch-event swipe-gesture pagey

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

使用SYSTEM_UI_FLAG_HIDE_NAVIGATION时首先侦听TouchEvent

从API 14开始,您可以SYSTEM_UI_FLAG_HIDE_NAVIGATION在Activity中的View上使用此标志,告诉系统您要隐藏导航栏,直到有用户交互(屏幕触摸).一旦用户点击屏幕,就会显示该栏.

我正在执行此操作的活动在用户触摸屏幕时执行一些操作(启动单独的活动),然后将上述标记添加到我的视图中,这非常有效.

添加该标志后,系统会截取第一个屏幕触摸,并通过显示导航栏对其做出反应.直到第二次触摸,我的任何视图或我的活动才会收到TouchEvents.

有没有人知道我可以设置一个监听器的方式,让我在第一次触摸屏幕时启动我的第二个活动,而不是在使用这个隐藏导航标志时需要双击?

我已经尝试了以下所有内容,当第一次触摸屏幕以显示导航栏时,我没有收到任何回调.

@Override
public void onUserInteraction(){
    Log.i(myTag, "INTERACT");
}

@Override
public boolean onGenericMotionEvent(MotionEvent me){
    Log.i(myTag, "GENERIC");

    return true;
}

//I thought maybe the size change would lead to a callback here. No dice though.
@Override 
public void onWindowAttributesChanged(WindowManager.LayoutParams params){
    Log.i(myTag, "WINDOW CHANGE");
}
@Override
public boolean dispatchTouchEvent(MotionEvent me){
    Log.i(myTag, "TOUCH");
    return true;
}
Run Code Online (Sandbox Code Playgroud)

注意:我没有试图阻止导航栏在第一次触摸时显示,我只是想在该事件发生时采取一些其他操作.

android navigationbar touch-event

17
推荐指数
1
解决办法
3149
查看次数

用户移动手指时确定当前正在触摸的视图

我有一个66个视图的网格,如果一个视图被触摸或拖动/移动我想改变它的背景颜色.

我猜我需要在父ViewGroup上放置一个触摸侦听器,但是如何确定拖动/移动哪个子视图?

android touch-event android-layout

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

如何在子视图组和父视图组触摸事件之间进行更改

我决定发布这个问题并回答这个问题的评论:
如何处理子视图中的点击,并触摸父ViewGroups?

我将粘贴评论:

假设我想仅仅为了处理一些孩子而覆盖触摸事件,我可以在这个函数中做些什么让它工作?我的意思是,对于一些孩子来说,它会像往常一样工作,对于一些人来说,父母视图将决定他们是否会接触到触摸事件.

所以问题是这样的:我如何阻止父母onTouchEvent()重写某些子元素onTouchEvent(),同时让它覆盖其他子元素?

android parent-child touch-event interception android-view

16
推荐指数
1
解决办法
4853
查看次数

Android绘制一条线来跟随你的手指

我想要做的是绘制一条跟随我的手指的线.我已经创建了一个自定义视图,我有一个onTouchEvent()可行的.

我可以onDraw()毫不费力地在方法中绘制静态线.

当我的手指移动时,我不确定如何画线.

  public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            Log.e(TAG, " - DOWN -");
            Log.e(TAG, " getX: " + event.getX());
            break;
        }
        case MotionEvent.ACTION_UP: {
            Log.e(TAG, " - UP -");
            Log.e(TAG, " getX: " + event.getX());
            break;
        }
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

你曾经做过一段时间的任何提示可以给出什么?

我是否需要设置坐标onTouchEvent()并不断使视图无效,以便小线段绘制?

最后,我只想用手指在屏幕上进行基本涂鸦,以进行此实验.

android drawing touch-event

15
推荐指数
2
解决办法
5万
查看次数

在React JS上绑定touchstart的正确方法是什么?

我正在学习React JS,截至目前我在源代码,测试或官方文档上找不到任何示例.在文档上,touchStart事件被认为是支持但handleTouchStart不起作用.

我发现的唯一地方和实际工作的例子是反应式触摸项目.

以下代码有效,但这是唯一的绑定方式吗?对我来说,它看起来像是一种廉价的解决方法

var MyHeader = React.createClass({
  handleTouchStart: function() {
    console.log('handleTouchStart');
  },
  render: function() {
    return this.transferPropsTo(
        <header onTouchStart={this.handleTouchStart}>{title}</header>
    );
  }
};
Run Code Online (Sandbox Code Playgroud)

这样做的实际方法是什么?

javascript touch-event reactjs

15
推荐指数
3
解决办法
2万
查看次数

防止默认按iOS而不是默认拖动iOS MobileSafari?

上下文:MobileSafari/iPad上的Web应用程序,全屏和嵌入在iframe中

目标:技术,提供自定义事件处理程序点击,但 (变焦)或拖动(滚动/锅).我们希望为Press提供自定义行为,但让Safari仍然可以处理滚动/平移/缩放.

问题:这两个目标似乎是相互排斥的.要防止Press手势的默认行为,必须立即响应ontouchstart调用event.preventDefault.但是,要让Drag上的默认行为继续,我们不能在初始ontouchstart上调用event.preventDefault.一旦调用了preventDefault,就无法在该手势序列中恢复默认行为(即直到所有手指都脱落).在发生某些移动之前,无法识别拖动.

拖动被说明是最简单的示例,但我们也关心获取Pinch和Double-tap的默认行为.我们从不想要"复制图像"的默认MobileSafari按行为或选择文本.

到目前为止的尝试:

  • 保存ontouchstart事件,并在超时后,稍后调用preventDefault(就在识别Press之前).没有效果.
  • 听' oncontextmenu '.不,默认的新闻行为不会通过此事件发出信号或路由.
  • 防止所有ontouch*处理程序中的默认值,然后当我们识别拖动/ 捏合手势时,使用initTouchEvent和/或initGestureEvent模拟新事件.以编程方式创建的事件命中了我们所有的回调,但Safari似乎不关注它们,没有触发默认行为.
  • 用假动作打破Safari的Press识别.Safari在最轻微的移动中取消了一次按下,但我们允许稍微倾斜.在ontouchstart之后模拟移动事件(如上所述)不会导致Safari无法识别按下如果手指没有"真实地"移动.

我们有一套全功能的手势识别器(以Javascript,ontouch*为单位),采用Apple 原生iOS手势识别器的风格.我们没有识别任何手势的问题,我们只是不知道复制Safari免费提供的缩放/平移/双击行为的好方法.

我们不需要代码; 我们正在寻找任何理论解决方案(除了"只是自己实现平移/缩放",但如果你有一种光滑的方式来做我们感兴趣的话),这将导致合理的成功.我们也有兴趣了解其他类似尝试这样做 - 当然我们不可能是第一个尝试这样做的人吗?

备用TL; DR:有没有办法阻止默认按下(也称为点击并保持)而不是触摸开始?

webkit web-applications mobile-safari ipad touch-event

14
推荐指数
1
解决办法
6664
查看次数

android 3.x中的拖放会导致拖动后的少量数字导致illegalStateException

在Android 3.x上有拖放机制的问题:在做了一些拖动(比如30次拖动)之后会产生异常(参见附件链接)

https://groups.google.com/forum/#!msg/android-platform/2APvO248NNY/rKI-5dCT8XcJ (我在日志中收到与该帖子相同的内容..)

android技术人员在那里回答它是API中的错误,并说避免问题的唯一方法是调用垃圾收集器.

我做的.异常没有被抛出,但过了一段时间(比如更多30-40次拖动)android停止从某种原因调用drop事件.

我尝试通过释放所有资源/画布/绘图缓存/回收位图来"刷新"所有视图并重新创建它们并没有帮助(不再抛出异常 - 但仍有一些拖拽掉落事件后'工作)

"帮助"唯一的事情是关闭活动并重新启动它.

有人以某种方式解决了这个问题,或者有一个简单的替代方案??? (旁边实现我自己的拖放功能..)

我想得到解决方案,不会强迫我重新启动或重新创建任何不想要的东西..

这里是演示错误的示例代码(没有演示我在使用System.GC后对drop事件的问题所说的部分):

public class DragandDropExampleActivity extends Activity {

private boolean mIsBeenDragged = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final ImageView imageViewToDRag = (ImageView) findViewById(R.id.image_view_to_drag);

    imageViewToDRag.setClickable(true);

    imageViewToDRag.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                mIsBeenDragged = true;
                DragShadowBuilder shadowBuilder = new DragShadowBuilder(imageViewToDRag);
                imageViewToDRag.startDrag(null, shadowBuilder, imageViewToDRag, 0);
            } else if (event.getAction() == MotionEvent.ACTION_UP) {

                mIsBeenDragged = false; …
Run Code Online (Sandbox Code Playgroud)

android drag-and-drop view touch-event illegalstateexception

14
推荐指数
1
解决办法
1057
查看次数

一个View的onTouchListener与onTouchEvent

视图之间有什么区别onTouchEvent:

public class MyCustomView extends View {
    // THIS :
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }
}
Run Code Online (Sandbox Code Playgroud)

及其onTouchListener:

MyCustomView myView = (MyCustomView) findViewById(R.id.customview);
myView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public void onClick(View arg0) {
        // do something
    }
});
Run Code Online (Sandbox Code Playgroud)

要么

public class MyCustomView extends View {

    public MyCustomView(Context context, AttributeSet attrs) {
        // THIS :
        setOnTouchListener(new View.OnTouchListener() {
            @Override
            public void onClick(View arg0) {
                // do something
            }
        });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) …
Run Code Online (Sandbox Code Playgroud)

android ontouchlistener touch-event

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

检测每个触摸事件而不覆盖dispatchTouchEvent()?

我正在开发Android库,需要跟踪使用它的应用程序上的所有触摸事件.现在,用户应该dispatchTouchEvent()在他们的每项活动上覆盖他们的活动.如下所示

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    MyLib.dispatchTouchEvent(event);
    return super.dispatchTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

Appsee使用Appsee.start(“key”);集成在应用程序启动的第一个活动中的onCreate方法检测触摸事件.这怎么可能.任何帮助?

android touch-event android-activity

13
推荐指数
1
解决办法
4540
查看次数