0

В моем коде onLongPress работает в полноэкранном режиме, но мне нужно onLongPress в определенную относительную компоновку. После получения значений X и Y в LongPress, я должен выполнить некоторые действия в событии onLongPress.Как установить onLongPress для определенного относительного макета с помощью GestureDetectorCompat?

public class MainActivity extends ActionBarActivity { 

private GestureDetectorCompat mDetector; 
public Bitmap bitmap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mDetector = new GestureDetectorCompat(this, new MyGestureListener()); 
    final RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.myView); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event){ 
    this.mDetector.onTouchEvent(event); 
    return super.onTouchEvent(event); 
} 

public void message(Context ctx,String msg,int duration) { 
    Toast.makeText(ctx, msg, duration).show(); 
} 

private class MyGestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public void onLongPress(MotionEvent e) { 
     float x = e.getX(); 
     float y = e.getY(); 

     message(getBaseContext()," X value is " + x + " Y value is "+ y ,Toast.LENGTH_SHORT); 
     super.onLongPress(e); 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     message(getBaseContext(),"Single tab" ,Toast.LENGTH_SHORT); 
     return super.onSingleTapConfirmed(e); 
    } 
} 

}

+0

так кормите детектор с MotionEvent – pskink

+0

@pskink этого компоновщика могли бы вы отредактировать мой код? –

+0

nope, вместо этого прочитайте об обработке MotionEvent в представлении: guide/themes/ui/ui-events.html – pskink

ответ

0

попробовать это с обработчиком в действии вниз событий

imgMainNotification.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 

new Handler().postDelayed(new Runnable() 
        { 
         public void run() 
         { 

          //do what youwanna do on long press here 

         } 
        }, 1 * 3000); 

       return true; 

      case MotionEvent.ACTION_UP: 


       return true; 
      default: 
       return false; 
      } 
     } 
    }); 
+0

Обработчик отправит работу за заданный период времени. Это не долгая пресса. –

+0

Если вы хотите долгое нажатие на событие касания, вы должны использовать обработчик, –

Смежные вопросы