2011-11-15 16 views
5

Próbuję uruchomić aplikację i jestem trochę zagubiony, jak zrobić to, co chcę.Przesuwane panele Android

To jest to, co chcę

left and right red sliders ; main white content

Oba czerwone panele powinny móc przesuwać na boki i biały należałoby poszerzyć, jeśli jeden z nich (lub oba) nich jest zwinięty, zajmując tego panelu przestrzeń. Gdy mam czerwone panele na ekranie, biały panel pokazuje całą zawartość i nie może być pod żadnym z paneli.

Co próbowałem do tej pory: Zacząłem od próby z dwoma SlidingDrawer s, ale biały panel dostał za czerwone, więc, nie ma szczęścia. Potem próbowałem z 2 LinearLayouts (czerwone panele) i RelativeLayout (biały panel) i próbowałem zmienić szerokość układów za pomocą przycisków (jak na obrazku u góry). Powodowało to zawsze problemy, których nie wiedziałem, jak rozwiązać.

Sugestie?

Edit: xml z przykładu SlidingDrawer:

<LinearLayout 
android:id="@+id/LinearLayout01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:gravity="bottom" 
android:background="#FFFFFFFF"> 
<SlidingDrawer 
    android:layout_width="100dip" 
    android:id="@+id/SlidingDrawer" 
    android:handle="@+id/slideHandleButton" 
    android:content="@+id/contentLayout" 

    android:layout_height="fill_parent" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:id="@+id/contentLayout" 
     android:orientation="horizontal" 

     android:background="#C0C0C0" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:text="Meio" 
      android:layout_toRightOf="@+id/buttonEsq" /> 
    </LinearLayout> 
    <Button 
     android:layout_width="30dip" 
     android:layout_height="30dip" 
     android:id="@+id/slideHandleButton" 
     android:background="@drawable/arrowup">   
    </Button> 
</SlidingDrawer> 
</LinearLayout> 

A xml z przykładu LinearLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 

    <RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent"     
    android:orientation="horizontal" 
    android:layout_toLeftOf="@+id/linearLayout3" 
    android:layout_toRightOf="@+id/linearLayout1" 
    android:background="#FFFFFFFF"> 
    <Button 
     android:id="@+id/buttonEsq" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 


     android:text="v--" /> 
    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Meio" 
     android:layout_toRightOf="@+id/buttonEsq" /> 

    <Button 
     android:id="@+id/buttonDir" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:layout_toRightOf="@+id/textView1" 
     android:text="--v" /> 
</RelativeLayout> 
<LinearLayout 
    android:id="@+id/linearLayout1" 
    android:layout_width="50dip" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 


    android:background="#FFFF0000"> 
    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Esquerda" /> 
</LinearLayout> 



<LinearLayout 
    android:id="@+id/linearLayout3" 
    android:layout_width="50dip" 
    android:layout_height="fill_parent" 
    android:layout_alignParentRight="true" 



    android:background="#FFF00000"> 
    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Direita" /> 
</LinearLayout> 

</RelativeLayout> 

Kod android (komentowane częścią jest kod 1st przykład) :

public class Main extends Activity { 
Button slideHandleButton; 
Button slideHandleButtonLeft; 
Button slideHandleButtonRight; 
SlidingDrawer slidingDrawer; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.mainlayouts); 
/* slideHandleButton = (Button) findViewById(R.id.slideHandleButton); 
    slidingDrawer = (SlidingDrawer) findViewById(R.id.SlidingDrawer); 

    slidingDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener() { 
     @Override 
     public void onDrawerOpened() { 
      slideHandleButton.setBackgroundResource(R.drawable.arrowdown); 
     } 
    }); 

    slidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener() { 
     @Override 
     public void onDrawerClosed() { 
      slideHandleButton.setBackgroundResource(R.drawable.arrowup); 
     } 
    });*/ 
    slideHandleButtonLeft = (Button) findViewById(R.id.buttonEsq); 
    slideHandleButtonLeft.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      LinearLayout lll = (LinearLayout) findViewById(R.id.linearLayout1); 
      RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(50, LinearLayout.LayoutParams.FILL_PARENT);    
      lll.setLayoutParams(params);    
     } 
    }); 
} 
} 
+0

Opublikowałem kod, który podjąłeś, co nie zadziałało. To może dać innym coś do zrobienia, sugerując podejście do ciebie. – hooked82

+0

Zrobione, mam nadzieję, że pomaga :) – Dporem

+0

[Spróbuj tego] (http://androidtrainningcenter.blogspot.in/2013/06/slidingpanelayout-android-making.html) – Sameer

Odpowiedz

1

SlidingDrawer można wsunąć tylko z prawej lub z dołu om, nie można go wsunąć od góry ani od lewej. Możesz wypróbować odpowiedź na to pytanie: Android SlidingDrawer from top? lub możesz spróbować przepisać kod źródłowy http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/SlidingDrawer.java.

Jednakże SlidingDrawer przyzwyczajenie pozwala

biała płyta wykazują wszystkie zawartości i nie może być w żadnym z paneli

jak będzie ślizgać białej panelu

Jedyne rozwiązanie, o którym mogę pomyśleć to użycie szeregu skal/translacji, tłumaczenie lewego lub prawego panelu poza ekranem i ustawienie widoczności na znikające, a jednocześnie skalowanie środkowego panelu w kierunku któregokolwiek z czerwonych paneli jest remov ed.

Próbowałem zrobić podobny prototyp jakiś czas temu i użyłem tej metody, ale animacje w skali wyglądały okropnie, nie wspominając o tym, że słuchacz onAnimationEnd nie działa, trzeba będzie przedłużyć LinearLayout i zastąpić onAnimationEnd. pracować.

+0

Sprawdź pierwsze zdanie, lewe jest wspomniane dwukrotnie. Prawdopodobnie masz rację w pewnym momencie. –

+0

ah ooops, poprawiony – triggs

+0

"Jedyne rozwiązanie, jakie mogę wymyślić, to użycie szeregu skal/translacji, przetłumaczenie lewego lub prawego panelu poza ekranem i utratę widoczności, a jednocześnie skalowanie środkowego panelu w Kierunek dowolnego czerwonego panelu jest usuwany. " Próbowałem tego i nie działało dobrze ... W każdym razie, proponuję inne podejście do mojego szefa, tylko mam nadzieję, że mu się podoba lub im w świecie bólu lol. W każdym razie, dzięki za pomoc, ten trudny temat odpowiedzieć :) – Dporem

Powiązane problemy