2014-10-20 7 views
18

Pracuję nad aplikacją i chcę uzyskać efekt podniesienia poziomu na ImageView lub dowolny View (! CardView w bibliotece pomocy) w Pre L APIs. Ale nie jestem w stanie osiągnąć tego, co próbowałem, użyta właściwość android:elevation, ale nie ma żadnego efektu (bez podniesienia).Efekt udźwigu Android L w Pre L (tylko przy użyciu właściwości elewacji)

Nie mogę znaleźć żadnego API, jeśli ktoś wskaże jakąkolwiek dokumentację, aby to osiągnąć w Pre L lub jakikolwiek fragment z biblioteki Support jest bardzo cenny.

+11

Elewacja nie jest dostępna na pre L. –

+2

przeczytałem to "Można również ustawić to z kodu za pomocą getElevation()/setElevation() (z podkładkami w ViewCompat) ' tutaj: http: //android-developers.blogspot .de/2014/10/implementacja-material-design-in-your.html – AdrianoCelentano

+1

@AdrianoCelentano To prawda, ale nie ma wpływu na urządzenia przed-5.0 –

Odpowiedz

1
  • ViewCompat.setElevation()/getElevation() nie działa na pre Lollipop.
  • ma zbyt czegokolwiek warto sprawdzić w bibliotece wsparcia, przynajmniej do wersji 21.1.1
  • Jak do tworzenia efektu elewacji przez siebie przyjrzeć this
2

Jeśli chcesz ustawić widoki w kształcie 3D, View.setElevation() i View.setTranslationZ() to dobry pomysł.

Niestety, te dwa atrybuty i metody zostały wprowadzone od czasu interfejsu API systemu Android 21. Nie można ich używać na urządzeniach pre-L lub API 21-.

Ale nadal istnieje sposób na dostosowanie cieni i konturów do widoków.

Granice rzutowania tła widoku określają domyślny kształt jego cienia. Kontury przedstawiają zewnętrzny kształt obiektu graficznego i definiują obszar tętnienia dla sprzężenia zwrotnego dotykowego.

Rozważmy widok, określoną z rozciągliwej tle:

<TextView 
android:id="@+id/myview" 
... 
android:elevation="2dp" 
android:background="@drawable/myrect" /> 

Tło odkształcalne jest zdefiniowany jako prostokąt z zaokrąglonymi rogami:

<!-- res/drawable/myrect.xml --> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
    <solid android:color="#42000000" /> 
    <corners android:radius="5dp" /> 
</shape> 

Widok rzuca cień o zaokrąglonych narożach, ponieważ tło do rysowania określa zarys widoku. Zapewnienie niestandardowego obrysu zastępuje domyślny kształt cienia widoku.

Aby zdefiniować niestandardowy obrys na widoku w kodzie:

  1. rozszerzyć klasę ViewOutlineProvider.
  2. Zastąp metodę getOutline().
  3. Przypisanie nowego dostawcy konspektu do widoku za pomocą metody .

Za pomocą metod z klasy Outline można tworzyć kontury owalne i prostokątne z zaokrąglonymi narożnikami. Domyślny dostawca konspektu dla widoków uzyskuje kontur z tła widoku. Aby zapobiec rzucaniu cienia przez widok, ustaw jego dostawcę konspektu na null.

Mam nadzieję, że to pomaga.

P.S.: yourAppNs:elevation="4dp" będzie dobrym pomysłem, jeśli używasz biblioteki Android-design.

+0

yourAppNs: elewacja = "4dp" nie działa – ThanosFisherman

+0

Zaimportowałeś ** bibliotekę projektowania androidów ** i ustawiłeś 'xmlns: yourAppNs =" http://schemas.android.com/apk/res-auto "' na twoim widoku roota ? – SilentKnight

+0

Tak, oczywiście, ale nie ma to żadnego wpływu na mój widok, więc pracowałem nad tym z kodu java za pomocą ViewCompat.setElevation (myView, 5) – ThanosFisherman

Powiązane problemy