【问题标题】:How to generate a double tap using MotionEvent如何使用 MotionEvent 生成双击
【发布时间】:2021-08-27 23:47:20
【问题描述】:

我正在尝试使用MotionEvent 生成双击,因此我可以欺骗视图,使其认为发生了双击,但它不起作用。 Zoomageview 是从 https://github.com/jsibbold/zoomage 导入的实现,它提供了 ImageView 缩放功能。双击是ZoomageView 的缩放功能,但我想以编程方式指定它应该放大的 x 和 y 坐标。

编辑:我忘了提到ZoomageView 扩展AppCompatImageView

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            MotionEvent motionEvent = MotionEvent.obtain(
                    SystemClock.uptimeMillis(),
                    SystemClock.uptimeMillis(),
                    MotionEvent.ACTION_DOWN,
                    v.getX(),
                    v.getY(),
                    0
            );
            zoomageView.onTouchEvent(motionEvent);

            motionEvent = MotionEvent.obtain(
                    SystemClock.uptimeMillis(),
                    SystemClock.uptimeMillis(),
                    MotionEvent.ACTION_UP,
                    v.getX(),
                    v.getY(),
                    0
            );
            zoomageView.onTouchEvent(motionEvent);
           motionEvent = MotionEvent.obtain(
                    SystemClock.uptimeMillis(),
                    SystemClock.uptimeMillis(),
                    MotionEvent.ACTION_DOWN,
                    v.getX(),
                    v.getY(),
                    0
            );
            zoomageView.onTouchEvent(motionEvent);
            motionEvent = MotionEvent.obtain(
                    SystemClock.uptimeMillis(),
                    SystemClock.uptimeMillis(),
                    MotionEvent.ACTION_UP,
                    v.getX(),
                    v.getY(),
                    0
            );
            zoomageView.onTouchEvent(motionEvent);
        }
    })

【问题讨论】:

    标签: java android touch-event double-click motionevent


    【解决方案1】:

    我想通了,我只需要增加 SystemClock.uptimeMillis() 返回的值。

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            MotionEvent motionEvent = MotionEvent.obtain(
                    SystemClock.uptimeMillis(),
                    SystemClock.uptimeMillis() + 100,
                    MotionEvent.ACTION_DOWN,
                    v.getX(),
                    v.getY(),
                    0
            );
            zoomageView.onTouchEvent(motionEvent);
    
            motionEvent = MotionEvent.obtain(
                    SystemClock.uptimeMillis() + 200,
                    SystemClock.uptimeMillis() + 300,
                    MotionEvent.ACTION_UP,
                    v.getX(),
                    v.getY(),
                    0
            );
            zoomageView.onTouchEvent(motionEvent);
           motionEvent = MotionEvent.obtain(
                    SystemClock.uptimeMillis() + 400,
                    SystemClock.uptimeMillis() + 500,
                    MotionEvent.ACTION_DOWN,
                    v.getX(),
                    v.getY(),
                    0
            );
            zoomageView.onTouchEvent(motionEvent);
            motionEvent = MotionEvent.obtain(
                    SystemClock.uptimeMillis()  + 600,
                    SystemClock.uptimeMillis()  + 700,
                    MotionEvent.ACTION_UP,
                    v.getX(),
                    v.getY(),
                    0
            );
            zoomageView.onTouchEvent(motionEvent);
        }
    })
    

    【讨论】:

      猜你喜欢
      • 2017-04-03
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2017-01-07
      • 2011-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多