Сделать клик на переднем плане

Я не нахожу способ сделать эту работу.

Мое приложение имеет 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);
        }
    };
Другие вопросы по тегам