长按Android事件时出错

时间:2013-05-08 11:58:55

标签: android motionevent

当用户长按android屏幕时,我尝试显示祝酒....但没有任何显示。为什么?简单的触摸显示吐司“触摸”工作正常!错误在哪里?

public class MainActivity extends Activity {
  Handler handler = new Handler(); 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);    
}

Runnable mLongPressed = new Runnable() { 
    public void run() { 
        Toast.makeText(getBaseContext(), 
                "Long press",
                Toast.LENGTH_LONG).show();
    }   
};

@Override
public boolean onTouchEvent(MotionEvent event){
    if(event.getAction() == MotionEvent.ACTION_DOWN)
        Toast.makeText(getBaseContext(), 
                " touch ",
                Toast.LENGTH_LONG).show();
        handler.postDelayed(mLongPressed, 1000);
    if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP))
        handler.removeCallbacks(mLongPressed);
    return super.onTouchEvent(event);
}

2 个答案:

答案 0 :(得分:1)

您应该使用GestureDetector来确定长按,如下所示:

final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
        public void onLongPress(MotionEvent e) {
            Toast.makeText(getBaseContext(), "Long press", Toast.LENGTH_LONG).show();
        }
    });

    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    };

答案 1 :(得分:0)

段:

public class MainActivity extends Activity implements OnLongClickListener {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);    

    View yourView = (View) findViewById(R.id.longclickview);
    yourView.setOnLongClickListener(this);
}

@Override
public boolean onLongClick(View v) {
    Toast.makeText(getBaseContext(), 
            "Long press",
            Toast.LENGTH_LONG).show();
    return false;
}