Сделать клик на переднем плане
Я не нахожу способ сделать эту работу.
Мое приложение имеет 2 FrameLayouts со многими дочерними представлениями (предположим ImageViews для простоты), расположенными один над другим.
Моя проблема в том, что мне нужен FrameLayout на TOP и ВСЕХ ЕГО ДЕТЕЙ, чтобы позволить касаниям проходить через них, достигая базового FrameLayout (и его дочерних элементов). Нечто похожее на события указателя: ни один из них в HTML не применяется ко всем изображениям из TOP-структуры.
Я пробовал setClickable(false) и setEnabled(false) как на FrameLayout, так и на его дочерних элементах, но если щелкнуть отключенные дочерние элементы (например, ImageView), касание не достигнет нижележащего ImageView (дочернего элемента нижней части). FrameLayout)
Следующий код - моя лучшая попытка отключить FrameLayout и его дочерние элементы (mSlideLayout - родительский FrameLayout, каждый слой - дочерний элемент imageview). Я что-то пропустил??
/** Create the layers structure into the layout */
void create_layers() {
Context context=getActivity();
mSlideLayout.removeAllViews();
for (FunqLayer layer:mLayers) {
if (layer!=null) {
View v=layer.init_internal(context, mSlideLayout); // constructs the child layer, suppose it's an ImageView
if ((v!=null) && (mIsMuteTouches)) {
v.setEnabled(false);
v.setClickable(false);
// this should obviously let touches pass through but it doesnt :(
}
}
}
if (mIsMuteTouches) {
// also do the same in the FrameLayout itself with no luck :(
mSlideLayout.setEnabled(false);
mSlideLayout.setClickable(false);
}
}
1 ответ
Да, конечно, я пропустил onInterceptTouchEvent, переопределив это в framelayout и вернув true, делает вышеуказанную процедуру избыточной:
FrameLayout slideLayout=new FrameLayout(getActivity()){
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (mIsMuteTouches) return true;
return super.onInterceptTouchEvent(ev);
}
};