1

我想检查该视图(无论哪个,在我的情况下ImageView)是而不是用户触摸/点击,我想不断地做。我认为我应该使用某种线程,但我不知道如何开始。我想要做的操作是隐藏ActionBar,当没有任何操作时我想隐藏它。
当视图触摸我用这个代码:如何检测视图没有被触摸/点击?

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     public void run() { 

      //if (registerImageViewCallback(slidesPagerAdapter); 
      gestureImageView = slidesPagerAdapter.getGestureImageView(); 
      gestureImageView.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        getSupportActionBar().show(); 
        return false; 
       } 
      }); 
     } 
    }, 10); 

但我有在未触及屏幕呢? :-)

+0

在ImageView没有被触摸一段时间后,你想隐藏ActionBar吗? –

+0

为什么不在应用程序启动时将其隐藏起来,然后当用户触摸屏幕打开它时,经过一段时间(也许500毫秒)后再次隐藏它。我认为你应该找到一种触摸方式。 – alicanbatur

+0

@FD_是的,我想要 – Nicramus

回答

1

添加标记到你的活动:

boolean wasTouched = true; 

添加,检查是否有与会者感动定时器:

Timer t = new Timer(); 
t.scheduleAtFixedRate(new TimerTask() { 
    @Override 
    public void run() { 
     if (wasTouched == false) { 
     runOnUiThread(new Runnable() { 
      public void run(){ 
       hideYourActionBar(); 
      }  
      }); 
     } else { 
     wasTouched = false; 
     } 
    }  
}, 0, YourDelayInMsHere); 

在你onTouchListener,设置wasTouched为true:

public boolean onTouch(View v, MotionEvent event) { 
    wasTouched = true; 
} 

这至少应该给你如何做到这一点的想法。

+0

终于,我用你的解决方案 – Nicramus

2

创建一个额外的布尔值(例如:notTouched)为true,然后在您的onTouch覆盖内将其设置为false,然后在任何时候您都可以检查布尔值是true还是false。

编辑: 如果你想隐藏它,它并没有被感动了一段时间后(如你所说) ,你可以在这样一个单独的线程实现一个循环附加计数器整数

while(true) { 
    if (notTouched) { 
     counter++ 
     if(counter == 20) { // Assuming 20 seconds have passed of not touching 
      hideMethodHere(); // Execute hiding 
     } 
     Thread.sleep(1000); // Sleep for a second (so we dont have to count in miliseconds) 
    } else { 
    counter = 0; // If it was touched, reset the counter 
    notTouched == true; // Reset the touch flag as well because otherwise it will be visible forever if you touch it 
    } 
} 
+0

谢谢!简单快速 – Nicramus

相关问题