Mam układ górnego paska z nagłówkiem, pionowym menu i przezroczystym widokiem tła.Usunięcie obiektu OnClickListener w widoku powoduje usunięcie wszystkich zdarzeń dotykowych w widokach za
Po naciśnięciu przycisku btn_menu
menu pionowe jest otwierane za pomocą animacji. Gdy menu jest otwarte, ustawiam OnClickListener
na przezroczystym widoku tła, który zamyka menu po kliknięciu przezroczystego tła. Podczas zamykania menu usunąć OnClickListener
z widoku tła, używając:
mTopBarBg.setOnClickListener(null);
Problemem jest to, że wydaje się, aby usunąć wszystkie zdarzenia odrobiną poglądów za nim (ustawiony w content_container
głównego układu) . Na przykład. a ViewPager
, który nie wykrywa już przesunięcia, lub ListView
, który nie przewija się i nie można już go kliknąć, podczas gdy wcześniej działały poprawnie.
Co jest nie tak?
w górnym pasku fragmentu
private void toggleMenu(int duration){
if(mMenuIsOpen){
TranslateAnimation anim1 = new TranslateAnimation(0,0,0,-(mHeight-mMenuVerticalOffset));
anim1.setFillAfter(true);
anim1.setDuration(duration);
mVerticalMenu.setAnimation(anim1);
AlphaAnimation anim2 = new AlphaAnimation(0.7f, 0.0f);
anim2.setFillAfter(true);
anim2.setDuration(duration);
mTopBarBg.setAnimation(anim2);
mTopBarBg.setOnClickListener(null);
mMenuIsOpen = false;
}
else{
TranslateAnimation anim1 = new TranslateAnimation(0,0,-(mHeight-mMenuVerticalOffset),0);
anim1.setFillAfter(true);
anim1.setDuration(duration);
mVerticalMenu.setAnimation(anim1);
AlphaAnimation anim2 = new AlphaAnimation(0.0f, 0.7f);
anim2.setFillAfter(true);
anim2.setDuration(duration);
mTopBarBg.setAnimation(anim2);
mTopBarBg.setOnClickListener(mBgClickListener);
mMenuIsOpen = true;
}
}
układ główny
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/mainbg"
android:scaleType="centerCrop"/>
<FrameLayout
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="44dp" />
<FrameLayout
android:id="@+id/top_bar_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false" />
</RelativeLayout>
układ górny pasek
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000" >
<View
android:id="@+id/top_bar_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:visibility="gone" />
<LinearLayout
android:id="@+id/vertical_menu"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_marginTop="44dp"
android:background="#ffffff"
android:orientation="vertical"
android:visibility="gone" >
<!-- vertical menu layout -->
</LinearLayout>
<RelativeLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="#ffffff" >
<Button
android:id="@+id/btn_menu"
android:layout_width="50dp"
android:layout_height="44dp"
android:background="@drawable/menubtn" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_toRightOf="@id/btn_menu"
android:gravity="center" >
<ImageView
android:layout_width="130dp"
android:layout_height="44dp"
android:src="@drawable/logo" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
Górny pasek menu z otwartą
Spróbuj również użyć 'setClickable (false)' z niewidzialnym widokiem. – Luksprog
Skończyło się na użyciu onTouchListener do kontrolowania, czy słuchacz zużywa zdarzenie, czy nie, ale twoje rozwiązanie również działa. Połóż to jako odpowiedź, a ja to zaakceptuję. Dzięki. – jul