Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:如何在不触发点击的情况下收缩缩放(动作向下)_Android_Touch_Zooming_Usability - Fatal编程技术网

Android 安卓:如何在不触发点击的情况下收缩缩放(动作向下)

Android 安卓:如何在不触发点击的情况下收缩缩放(动作向下),android,touch,zooming,usability,Android,Touch,Zooming,Usability,目前,我已经为我的绘图应用程序实现了一个缩放,效果非常好。只是几句话,让你知道我在说什么: setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent rawEvent) { WrapMotionEvent event = WrapMotionEvent.wrap(rawEvent);

目前,我已经为我的绘图应用程序实现了一个缩放,效果非常好。只是几句话,让你知道我在说什么:

setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent rawEvent) {
                WrapMotionEvent event = WrapMotionEvent.wrap(rawEvent);

                // Handle touch events here...
                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_DOWN:
                    drawSomethingHere();
                case MotionEvent.ACTION_POINTER_DOWN:
                    startZoomingModeHere();
...
所以我想要的是:用一个手指画,用两个手指缩放。 问题是:在食指触地之前总是会触发一个动作向下事件。因此,每当我想缩放时,我的应用程序都会在缩放模式启动之前绘制一个点


有人知道如何解决这个问题吗?

我想你应该等几毫秒再开始画图,因为不可能在同一毫秒内准确地画出两个手指

您可以等待一个布尔变量

布尔布尔指针向下=false

switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
             // Start a thread to call drawSomethingHere in 300 - 700 milliseconds
             // if action_pointer_down haven’t been called.
             new  ThreadDraw().start();
            case MotionEvent.ACTION_POINTER_DOWN:
               boolean_pointer_down=true;
                startZoomingModeHere();
....

//Method run in the thread
public void run(){
   wait(300); //if the user didn't put more fingers in 300 ms he's not going to zoom
    if (!boolean_pointer_down){
    drawSomethingHere();
    boolean_pointer_down = false;
    }
  }

我认为你们应该在开始画图之前等待几毫秒,因为不可能在同一毫秒内精确地放置两个手指

您可以等待一个布尔变量

布尔布尔指针向下=false

switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
             // Start a thread to call drawSomethingHere in 300 - 700 milliseconds
             // if action_pointer_down haven’t been called.
             new  ThreadDraw().start();
            case MotionEvent.ACTION_POINTER_DOWN:
               boolean_pointer_down=true;
                startZoomingModeHere();
....

//Method run in the thread
public void run(){
   wait(300); //if the user didn't put more fingers in 300 ms he's not going to zoom
    if (!boolean_pointer_down){
    drawSomethingHere();
    boolean_pointer_down = false;
    }
  }
解决方法如下:

  • 向上绘制动作,并移动动作,而不是向下移动动作
  • 在动作\移动时,不要立即绘制,而是将点放在缓冲区中(这将确保您不会在多点触控事件发生之前解释意外的单点触控事件)
  • 缓冲区有3个点后,立即启动绘图模式
  • 一旦发生动作指针向下事件(发生多点触摸),清除缓冲区并开始缩放模式
  • 这是我能做的最好的了。结果非常令人信服……

    解决方法如下:

  • 向上绘制动作,并移动动作,而不是向下移动动作
  • 在动作\移动时,不要立即绘制,而是将点放在缓冲区中(这将确保您不会在多点触控事件发生之前解释意外的单点触控事件)
  • 缓冲区有3个点后,立即启动绘图模式
  • 一旦发生动作指针向下事件(发生多点触摸),清除缓冲区并开始缩放模式

  • 这是我能做的最好的了。结果非常令人信服……

    这是一个想法。但是如果用户想要画画,他/她必须能够不等待就画画。使用您的代码,用户在绘制时会意识到一些延迟:/n这是一个想法。但是如果用户想要画画,他/她必须能够不等待就画画。使用您的代码,用户在绘图时会意识到一些延迟:/I面临相同的问题..您能否进一步详细说明解决方案我面临相同的问题..您能否进一步详细说明解决方案