精华内容
下载资源
问答
  • TouchEvent

    2017-09-05 11:08:35
    Touch 事件的 流程
    package com.example.admin.myapplication;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    
    
    /**
     * http://blog.csdn.net/iispring/article/details/50364126
     *
     * http://blog.csdn.net/yanbober/article/details/45932123
     *
     *
     *
     * 下面 是 触摸事件 流程
     * dispatchTouchEvent: MainActivity 事件分发
     * onUserInteraction: 这个是 干嘛的
     *
     * dispatchTouchEvent: 自定义 ViewGroup dispatchTouchEvent
     * onInterceptTouchEvent: 自定义 ViewGroup onInterceptTouchEvent
     *
     * dispatchTouchEvent: 自定义 View dispatchTouchEvent
     * onTouchEvent: 自定义 View onTouchEvent
     *
     * onTouchEvent: 自定义 ViewGroup onTouchEvent
     * onTouchEvent: MainActivity  onTouchEvent事件
     *
     * dispatchTouchEvent: MainActivity 事件分发
     * onTouchEvent: MainActivity  onTouchEvent事件
     *
     */
    public class MainActivity extends AppCompatActivity {
    
    
        private static final String TAG = "Z";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Log.i(TAG, "onCreate: MainActivity 创建了");
        }
    
        /**
         * 事件 分发
         *
         *
    
         第一条主线是,从Activity -> ViewGroup -> View     从外向内依次调用dispatchTouchEvent方法,android会依次把MotionEvent参数传递给该方法。
         dispatchTouchEvent的作用是传递触摸事件,该主线体现了将触摸事件从外向内逐级传递派发的过程,
         dispatchTouchEvent是每次传递触摸事件的入口。
    
         第二条主线是,从View -> ViewGroup -> Activity     从内向外依次调用onTouchEvent方法,Android会依次把MotionEvent参数传递给该方法。
         onTouchEvent的作用是处理触摸事件,该主线体现了将触摸事件从内向外逐级处理的过程。
    
         *
         */
    
    
        /**
         * 触摸事件
         * <p>
         * 只有当触摸事件没有被任何的ViewViewGroup处理过的时候,Activity才会执行自己的onTouchEvent去处理触摸事件。
         *
         * @param event 事件
         * @return 消费 不消费
         */
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            Log.i(TAG, "onTouchEvent: MainActivity  onTouchEvent事件 ");
            return super.onTouchEvent(event);
        }
    
        @Override
        public void onUserInteraction() {
            super.onUserInteraction();
            Log.i(TAG, "onUserInteraction: 这个是 干嘛的 ");
        }
    
    
        /**
         * 派遣 分发 触摸事件
         * <p>
         * 所有在UI上的触摸操作生成的触摸事件都首先会触发ActivitydispatchTouchEvent方法的执行,其源码如下所示:
         * <p>
         * public boolean dispatchTouchEvent(MotionEvent ev) {
         * if (ev.getAction() == MotionEvent.ACTION_DOWN) {
         * onUserInteraction();
         * }
         * if (getWindow().superDispatchTouchEvent(ev)) {
         * return true;
         * }
         * return onTouchEvent(ev);
         * }
         *
         * @param ev
         * @return
         */
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            Log.i(TAG, "dispatchTouchEvent: MainActivity 事件分发 ");
            return super.dispatchTouchEvent(ev);
        }
    
    
    }
    
    
    
    
    package com.example.admin.myapplication.viewgroup;
    
    import android.content.Context;
    import android.support.annotation.Nullable;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.widget.LinearLayout;
    
    /**
     * Created by admin on 2017/9/5.
     * <p>
     * TODO 自定义 线性 布局
     */
    public class ZLinearLayout extends LinearLayout {
    
        private static final String TAG = "Z";
    
        public ZLinearLayout(Context context) {
            super(context);
        }
    
        public ZLinearLayout(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
        }
    
        public ZLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        /**
         * ViewGroup 触摸事件
         *
         * @param event
         * @return
         */
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            Log.i(TAG, "onTouchEvent: 自定义 ViewGroup onTouchEvent ");
            return super.onTouchEvent(event);
        }
    
        /**
         * ViewGroup 事件 分发
         * <p>
         * dispatchTouchEvent方法是ViewGroup对触摸事件进行处理的入口。
         * <p>
         * ViewGroup中定义了一个TouchTarget类型的成员变量mFirstTouchTarget,用于保存当前ViewGroup中处理了触摸事件的子View     * <p>
         * <p>
         * 首先,dispatchTouchEvent方法会调用其自身的onInterceptTouchEvent方法,
         * onInterceptTouchEvent是用来拦截ViewGroup将触摸事件传递给其子View的,
         * 如果该方法返回true,就表示ViewGroup应该拦截触摸事件;如果返回false     * 表示ViewGroup不应该拦截触摸事件,应该将触摸事件传递给子View     * dispathTouchEvent方法中还定义了一个boolean类型的handled变量,
         * 用于保存dispathTouchEvent方法的返回值,如果是true就表示触摸事件被当前的ViewGroup处理了,
         * 反之则表示没被处理。
         *
         * @param ev
         * @return
         */
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            Log.i(TAG, "dispatchTouchEvent: 自定义 ViewGroup dispatchTouchEvent ");
            return super.dispatchTouchEvent(ev);
        }
    
        /**
         * ViewGroup 事件拦截
         * <p>
         * 然后,只有当onInterceptTouchEvent返回了falseViewGroup才会依次遍历其子View     * 其会通过调用isTransformedTouchPointInView方法判断MotionEvent所携带的触摸事件的坐标是否落在子View的范围内,
         * 如果触摸事件的坐标恰好落在了该子View范围内,说明我们触摸了当前ViewGroup内的该子View     * 这样ViewGroup就会把触摸事件的坐标以及该子View传递给dispatchTransformedTouchEvent方法,
         * 在该方法内会调用子ViewdispatchTouchEvent方法,其返回值表示自View是否处理了触摸事件,
         * 如果dispatchTransformedTouchEvent返回true,表示子View处理了触摸事件,
         * 这样ViewGroup会通过调用addTouchTarget方法将mFirstTouchTarget绑定该子View     * 并且变量alreadyDispatchedToNewTouchTarget也会设置为true,表示已经有子View处理了触摸事件。
         * 一旦有子View处理了触摸事件,ViewGroup就会通过break跳出for循环,不再对其他子View进行遍历。
         * <p>
         * 之前提到过onInterceptTouchEvent用于拦截ViewGroup向子View传递触摸事件,
         * ViewGroup中的默认实现一直返回false,即表示不拦截。我们可以重写该方法以实现我们自己的触摸事件拦截逻辑。
         *
         * @param ev
         * @return
         */
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            Log.i(TAG, "onInterceptTouchEvent: 自定义 ViewGroup onInterceptTouchEvent");
            return super.onInterceptTouchEvent(ev);
        }
    
    
    }
    
    
    
    package com.example.admin.myapplication.view;
    
    import android.content.Context;
    import android.support.annotation.Nullable;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.widget.TextView;
    
    /**
     * Created by admin on 2017/9/5.
     * <p>
     * TODO  自定义 TextView
     */
    public class ZTextView extends TextView {
    
        public ZTextView(Context context) {
            super(context);
        }
    
        public ZTextView(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
        }
    
        public ZTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        private static final String TAG = "Z";
    
        /**
         * 由上可以看出,在dispatchTouchEvent方法中是先执行OnTouchListeneronTouch方法,
         * 一旦其返回true,就不会调用View自身的onTouchEvent方法了,
         * 只有OnTouchListener没有处理触摸事件才会在后面执行ViewonTouchEvent方法。
         *
         * @param event
         * @return
         */
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            Log.i(TAG, "onTouchEvent: 自定义 View onTouchEvent ");
            return super.onTouchEvent(event);
        }
    
        /**
         * dispatchTouchEventView处理触摸事件的入口。在该方法中,View首先会查看其有没有设置过OnTouchListener     * 如果设置过就调用OnTouchListeneronTouch方法,如果其返回了true     * 就表明触摸事件被处理了,result就会设置为true。如果触摸事件没有被OnTouchListener处理,
         * 那么就会执行ViewonTouchEvent方法,如果onTouchEvent返回了true,就表示触摸事件被View处理了,
         * result就被设置为了true     *
         * @param event
         * @return
         */
        @Override
        public boolean dispatchTouchEvent(MotionEvent event) {
            Log.i(TAG, "dispatchTouchEvent: 自定义 View dispatchTouchEvent ");
            return super.dispatchTouchEvent(event);
        }
    
    }
    


     


     
    展开全文
  • TouchEvent 解释Android TouchEvent的流程。
  • Android TouchEvent事件传递机制
  • starling TouchEvent

    2019-09-30 20:25:02
    private var beginY:Number;private function touchEventHandler(e:TouchEvent):void{ // TODO Auto Generated method stub var touch:Touch = e.getTouch(e.target as DisplayObject); if(touch) { if(tou...
    private var beginY:Number;
    private function touchEventHandler(e:TouchEvent):void
    {

    // TODO Auto Generated method stub
    var touch:Touch = e.getTouch(e.target as DisplayObject);
    if(touch)
    {
    if(touch.phase == TouchPhase.BEGAN)beginY = touch.globalY;
    else if(touch.phase == TouchPhase.ENDED)
    {
    if((touch.globalY - beginY) > 0)
    {
    trace("scroll down");
    }
    else if((touch.globalY - beginY) < 0)
    {
    trace("scroll up");
    }
    }
    }
    }

    转载于:https://www.cnblogs.com/tonyning/p/4538631.html

    展开全文
  • Android TouchEvent事件传递机制
  • iOS TouchEvent实战

    2020-04-11 16:17:19
    从手指接触屏幕,到app控件作出响应,就是一个完整的TouchEvent发生了。 通过控制TouchEvent流程,可以实现哪些基础需求: 增大控件响应范围; 阻断UIScrollView对事件的截取; 来看下整个过程:手指触摸->...

    从手指接触屏幕,到app控件作出响应,就是一个完整的TouchEvent发生了。

    通过控制TouchEvent流程,可以实现哪些基础需求:

    1. 增大控件响应范围;
    2. 阻断UIScrollView对事件的截取;

    来看下整个过程:手指触摸->产生TouchEvent->发送给UIApplication寻找响应者响应。这里其实通过hitTest:WithEvent从下往上(从window到顶级视图)寻找一个在手指点击范围内并且可以响应事件的响应者;是否在点击范围根据pointInside来判断,所以如果你想要增大控件响应范围,可以重写这个方法。例如:

    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
    {
        if (CGRectContainsPoint(CGRectMake(-10, -10, self.bounds.size.width + 20, self.bounds.size.height + 20), point)) {
            return YES;
        }
        return NO;
    }

    上面这个就可以增加控件的响应范围,上下左右都延伸了10。

    寻找最佳响应者方法:hitTest:withEvent:如果需要在UIScrollView子视图实现自定义touchBegin手势,那么需要在这个方法里做判断。当点击的视图是需要处理自定义的视图时,通知父视图即UIScrollView禁止滑动,否则自定义手势不执行;例如:

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
        UIView *view = [super hitTest:point withEvent:event];
        
        if ([view isKindOfClass:[UIImageView class]]) {
            if (self.virtualStickViewTouchImageView) {
                //这里回调禁用滑动
                self.virtualStickViewTouchImageView(YES);
            }
        }
        
        return view;
    }

    未完待续。。。

    展开全文
  • android TouchEvent

    2014-04-29 13:52:46
    android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法: 1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent 2)public boolean onInterceptTouchEvent...

    android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
    1
    )public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent
    2
    )public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
    3
    )public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent

    当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由  dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。


     

     

    Android中实现Gridview 的拖拽功能,pointToPosition()方法来获取我们按下的itemposition

    WindowManager updateViewLayout 方法就能对镜像进行拖动
    展开全文
  • 触摸事件touchevent

    2020-01-09 22:29:21
    触摸事件的历史: 2007年乔帮主神之手iphone的发布,使得便携设备进入了每个普通人的生活。 多年以后的一个秋天,也就是2013年的10...直到今天,touchevent在移动端h5开发中被广泛的使用,我想我真的很尊敬乔布斯。 ...
  • TouchEvent分发机制

    2017-07-13 22:27:41
    触摸屏幕首先调用Activity的dispatchTouchEvent(),可以重写这个方法来拦截本该传递给Window的TouchEvent。 /** * Called to process touch screen events. You can override this to * intercept all touch ...
  • 触摸对象TouchEvent

    2020-05-05 18:53:29
    TouchEvent是一类秒数手指在触摸平面(触摸屏、触摸板等)的状态变化的事件,这类事件用于秒数一个或多个触点,使开发者可以检测触点的移动,触点的增加和减少,等等 touchstart、touchmove、touchend三个事件都会...
  • Android TouchEvent 分发流程
  • Android源代码:android触摸事件_TouchEvent,触摸事件监听器
  • TouchEvent分发过程一:TouchEvent在ViewGroup中的分发过程中,分析了TouchEvent在ViewGroup中的分发过程。为了了解复杂容器中如何处理TouchEvent的分发,本文将简单分析一下TouchEvent在ListView中的分发过程。 ...
  • Android TouchEvent分发

    2015-12-23 22:00:41
    这里主要需要考虑Android中的TouchEvent事件分发处理。 如图所示,当listView调用onInterceptTouchEvent函数处理完后,若返回false,该事件将继续往子View分发,如果返回 true,不再向子view分发,直接调用...
  • Android TouchEvent处理机制的详细剖析
  • UI之touchEvent

    2015-12-14 09:47:23
    用背景色的随机改变来验证touchEvent的效果
  • TouchEvent事件传递机制

    2017-11-29 16:23:58
    涉及的知识点: 主要涉及的方法: 方法 用途 public boolean dispatchTouchEvent(MotionEvent ev) 用来分发TouchEvent public boolean onInterceptTouchEvent(MotionEvent ev) ...用来拦截TouchEvent
  • android touchEvent 事件分发
  • 只是一套自定义的view和Viewgroup,都是很简单的代码,为了避免麻烦就上传上来了,看touchevent传递的时候可以在dispatchTouchevent和touchevent中打上断点,调试就行了. 只有dispatchTouchEvent和TouchEvent
  • <div><p>Added constructor tests for Touch and TouchEvent based on <a href="https://w3c.github.io/touch-events/#touch-interface">Touch Events v2 - Touch Interface</a> and ...<p>Browser support: ...
  • Android TouchEvent事件分发机制 遥控器等按键设备走的是KeyEvent的分发流程,普通触屏手机走的是TouchEvent分发流程。这里只对TouchEvent分发流程做分析 源码分析 从Activity的dispatchTouchEvent开始分发 ...
  • android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法: 1.public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent 2.public boolean onInterceptTouchEvent...
  • TouchEvent的dispatchTouchEvent事件分发流程图
  • qt5 怎么使用touchevent

    2017-03-12 10:00:59
    void touchEvent(QTouchEvent *event); void CLogin::touchEvent(QTouchEvent *event) { switch (event->type()) { case QEvent::TouchBegin: test->setText(tr("TouchBegin")); break; case QEvent::...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,660
精华内容 2,664
关键字:

TouchEvent