Если я хорошо понимаю, что вы добавили кнопки в свой дескриптор SlidingDrawer, и вы хотите, чтобы они работали как кнопки, когда пользователь нажимал их, сохраняя стандартное поведение SlidingDrawer при нажатии или перетаскивании дескриптора?
Я просто решил аналогичную проблему.
Моя Handle смотрела что-то вроде этого:
Он состоит из двух кнопок и центра TextView, который будет реальный дескриптор (реагирующий в качестве стандартного SlidingDrawer ручки).
Для того, чтобы кнопки работать независимо от SlidingDrawer я изменил немного исходный код в onInterceptTouchEvent метода стандартного класса SlidingDrawer.java (скопировать вставить исходный файл из андроида исходного кода):
public boolean onInterceptTouchEvent(MotionEvent event) {
//...
final Rect frame = mFrame;
final View handle = mHandle;
// original behaviour
//mHandle.getDrawingRect(frame);
// New code
View trackHandle = mTrackHandle;
// set the rect frame to the mTrackHandle view borders instead of the hole handle view
// getParent() => The right and left are valid, but we need to get the parent top and bottom to have absolute values (in screen)
frame.set(trackHandle.getLeft(), ((ViewGroup) trackHandle.getParent()).getTop(), trackHandle.getRight(), ((ViewGroup) trackHandle.getParent()).getBottom());
if (!mTracking && !frame.contains((int) x, (int) y)) {
return false;
}
//...
}
Я также добавил сеттер для mTrackHandle атрибут установлен, при создании деятельности, реальный hanlde использовать:
protected void onCreate(Bundle savedInstanceState) {
//...
mSlidingDrawer.setTrackHandle((View) findViewById(R.id.menu_handle_TextView_Title));
//...
}
После этого вы можете установить стандартный слушателя на ваших двух кнопок. Они будут работать как шарм.
Это один путь :), который на самом деле работает. Есть ли возможность просто расширить базовый класс, а затем переопределить необходимые методы? –
Что установленTrackHandle здесь? –
Это метод, который я добавил в Android [SlidingDrawer] (http://developer.android.com/reference/android/widget/SlidingDrawer.html), чтобы можно было установить TrackHandle. По умолчанию используется только метод getHandle(). Чтобы добавить его, вам нужно подклассифицировать класс SlidingDrawer и добавить метод. –