Я хочу реализовать глобальный виджет NavigationBar в Android, расширяет FrameLayout, чтобы его можно было просто объявить в макете XML, чтобы не включать в каждое действие.
Панель навигации имеет три компонента: логотип, заголовок,Кнопка При нажатии или отклонении на панели навигации (не включая кнопку) я что-то покажу. Но теперь мой жест onFling не может быть обнаружен (OnFling в SwipeGestureListener были протестированы), любой может помочь мне.
Класс NavigationBar:
public class NavigationBarWidget extends FrameLayout implements View.OnClickListener
private SwipeGestureListener mSwipeListener = new SwipeGestureListener();
private GestureDetector mGestureDetector;
NavigationBarWidget ():
mGestureDetector = new GestureDetector(mSwipeListener);
this.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.v("Nav", "onTouch");
return mGestureDetector.onTouchEvent(event);
}
});
OnClick ():
@Override
public void onClick(View paramView)
{
if(paramView.getId()== mShareIcon.getId()){
AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());
builder.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}else{
Log.v("Nav", "onClick");
}
}
onFling () в SwipeGestureListener:
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.v("Nav", "onFling");
try {
if (Math.abs(e1.getX() - e2.getX()) > SWIPE_MAX_OFF_PATH)
{
return false;
}
else
{
if ((e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE) && (Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY)) {
this.mCallbackListener.onFlingDown();
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
Logcat: когда панель навигации Touch или Fling Down выдает «onTouch», но жест onFling не обнаруживается.