我试图制作一个应用程序,这件事让我大脑破碎了。用户必须选择我拥有的12个ImageView中的一个。如果它是正确的但用户只触摸它少于3秒,则显示正常消息。但如果他/她触摸超过3秒钟,则会触发新的不同消息。
问题是我有一个onClickListener来获取用户点击的ImageView的TAG,并将其与正确的比较。如果它是正确的,它还要做下一个工作: 用户是否触摸过它超过3秒钟?如果是,则显示消息,如果没有显示不同的消息。
@Override
public void onClick(View v) {
if(v.getId()==R.id.btLogOut){ //this one is to see if the user clicked the logout Button
DBH.deletePerson();
finish();
startActivity(new Intent(Fake.this, MainActivity.class));
finish();
}
if(v.getTag().equals("the one who waits for the on touch")){
ImageView x = (ImageView)findViewById(v.getId());
x.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastDown = System.currentTimeMillis();
break;
case MotionEvent.ACTION_UP:
lastDuration = System.currentTimeMillis() - lastDown;
cambio(lastDuration);
break;
}
return false;
}
public void cambio(long ld){ //check time it has been touched
if (ld > 3000) {
Toast.makeText(getApplicationContext(), "YES", Toast.LENGTH_SHORT).show();
lastDuration = 0;
}
if (ld < 1000) {
lastDuration = 0;
Toast.makeText(getApplicationContext(), "NO", Toast.LENGTH_SHORT).show();
}
}
});
我遇到的主要问题是:当我第一次触摸到正确的图像时,它不会进入onTouch,只能在onClick中进入。 你们知道实现这个更好的主意吗?
非常感谢你!
答案 0 :(得分:1)
return true
事件中ACTION_DOWN
,以获得ACTION_UP
事件ACTION_CANCEL
事件并将其视为ACTION_UP
。 ACTION_DOWN
和ACTION_UP
之间的时间间隔,并忽略超过x
秒的触摸。