2015-08-11 18 views
7

Arka planda/banner olarak bir görüntüye sahip bir kaydırma/daraltma araç çubuğu elde etmek için bir CoordinatorLayout içinde CollapsingToolbarLayout kullanan bir Android etkinliğim var.CollapsingToolbarLayout öğesinde paralaks görüntüsünün başlangıç ​​yüksekliğini ayarlama

Görüntü internetten yükleniyor ve boyutunu önceden bilmiyorum.

Araç çubuğunun başlangıçta belirli bir yükseklik (160dp) olmasını isterim, ancak görüntü bundan daha büyükse, kullanıcının görüntünün geri kalanını ortaya çıkarmak için daha da aşağı kaydırmasına izin vermek isterim. Ancak, bu asla otomatik olarak gerçekleşmemelidir. Başlangıç ​​durumu 160dp yüksekliğindedir, ancak kullanıcının görüntünün yüksekliğini artırmak için aşağı kaydırması gerekir.

Bunu başarmak için doğru yükseklik/minheight kombinasyonunu bulamıyorum. Bu bile mümkün mü? İşte

benim düzenidir:

Banner resminin yüksekliği araç çubuğu başlangıçta, ama bu, çünkü belli ki bu şekilde ben 160dp ötesine uzatamaz ne kadar büyük kontrol eden 160dp olarak ayarlanır

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:background="@color/toolbar_text"> 

    <android.support.design.widget.CoordinatorLayout 
      android:id="@+id/coordinatorLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true"> 

     <android.support.design.widget.AppBarLayout 
       android:id="@+id/appBarLayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:fitsSystemWindows="true"> 

      <android.support.design.widget.CollapsingToolbarLayout 
        android:id="@+id/collapsing_toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        app:layout_scrollFlags="scroll|exitUntilCollapsed" 
        app:contentScrim="?attr/colorPrimary" 
        android:fitsSystemWindows="true"> 

       <!-- The background banner --> 
       <ImageView 
         android:id="@+id/imgBanner" 
         android:layout_width="match_parent" 
         android:layout_height="160dp" 
         android:scaleType="centerCrop" 
         android:fitsSystemWindows="true" 
         app:layout_collapseMode="parallax"/> 

       <android.support.v7.widget.Toolbar 
         android:id="@+id/toolbar" 
         android:layout_width="match_parent" 
         android:layout_height="?attr/actionBarSize" 
         app:layout_collapseMode="pin" 
         app:theme="@style/AppToolbarTheme" /> 

      </android.support.design.widget.CollapsingToolbarLayout> 

     </android.support.design.widget.AppBarLayout> 

     <android.support.v4.widget.NestedScrollView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="fill_vertical" 
       android:clipToPadding="false" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" > 

       ... 
     </android.support.v4.widget.NestedScrollView> 

    </android.support.design.widget.CoordinatorLayout> 

</LinearLayout> 
görünümün yüksekliği.

CollapsingToolbarLayout veya AppBarLayout ürününe 160dp yükseklik ayarlamayı denedim, ancak hiçbir şey işe yaramadı, her zaman maksimum 160dp yüksekliğinde ve görüntüyü daha büyük olsa bile yalnızca aşağı (daha küçük resim) ve aşağı doğru kaydıyorum. ImageView, wrap_content olarak ayarlanacak şekilde ayarlanır. İşte Mockup of what I want

+0

Aynı şeylere sahip olmaya çalışıyorum. Bu çalışmayı başardı mı? –

cevap

4

Ben daha iyi bir yol emin değilim ama bunu duymak isteriz, bunu başarmanın bir hacky yoludur: Burada

net değil ben durumda ne elde etmek istediğinizi bir çizim var . projenizde ControllableAppBarLayout

Yeri bu kod göz atın ve değiştirin:

android.support.design.widget.AppBarLayout 

olarak:

ControllableAppBarLayout 

android ayarlayın: ControllableAppBarLayout ait layout_height sizin araç çubuğu, yani maksimum boyutu olmak "daha aşağı kaydırma" resminizde istediğiniz boyut.

Sonra onCreate() yönteminde kodunuzda, sen ControllableAppBarLayout erişebilirsiniz:

appBarLayout = (ControllableAppBarLayout) findViewById(R.id.appBarLayout); 
appBarLayout.collapseToolbar(); 

appBarLayout.collapseToolbar() tamamen araç çubuğu kapanacak. Özellikle

private void performCollapsingWithoutAnimation() { 
    if (mParent.get() != null) { 
     mBehavior.onNestedPreScroll(mParent.get(), this, null, 0, getHeight(), new int[]{0, 0}); 
    } 
} 

araç görüntünün maksimum yüksekliği ve başlangıçta göstermek istediğiniz yüksekliği arasındaki farkı temsil eden dp numaraya GetHeight() değiştirin: Bununla birlikte, ControllableAppBarLayout bu yöntemi değiştirebilir. Yani, yukarıda belirttiğiniz gibi "başlangıç ​​durumu" ile "aşağı doğru kaydırma" arasındaki fark.

Bu kesmek istediğiniz şeyi gerçekleştirmelidir.

+0

Nice, iyi çalışıyor ve henüz herhangi bir yan etkisi bulamadı. Teşekkürler! –

+0

Çalıştığını duyduğuma sevindim, bu harika. Rica ederim. – Ethan

+1

Belki de bir sorun: 'Tamamen genişletilmiş' yüksekliğin cihazdaki mevcut ekran alanını asla aşmadığından emin olmanın bir yolu var mı? Örneğin, yüksekliği 420dp olarak ayarlıyorum, cihazımda hala altta biraz boşluk kalıyor. Ancak, birisinin çok daha kısa bir cihazı varsa, içeriği ekranın sonuna kadar kaydırır (görüntü tüm ekranı kaplar) ve daha sonra artık geriye kaydırma yapamazlar. Cihazı manzara moduna çevirdiğinizde aynı şey. ControllableAppBarLayout için bir alt marjı uygulamayı denedim, ancak hiçbir şey yapmıyor gibi görünüyor. –

İlgili konular