翻翻git之---可以收縮伸展的自定義LinearLayout ExpandableLinearLayout
阿新 • • 發佈:2019-01-25
今天無意中看到個十分好用,而且效果類似於之前寫過的QQ沒網路的那種呈現方式,這邊分享給大家,先貼下效果
控制元件部分收縮
控制元件全部收縮
How to use?
主build檔案
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
包build檔案
dependencies {
compile 'com.github.cachapa:expandablelayout:1.1'
}
EC:自行Copy很簡單就一個類一個XML 很容易植入
因為是一個試圖組,例子中作為根節點的佈局來操作,我們使用時看你的需要吧,像這樣
<net.cachapa.expandablelayout.ExpandableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/expandable_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:el_duration="1000"
app:el_expanded="true">
<TextView
android:id="@+id/expand_button"
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:windowBackground"
android:elevation="6dp"
android:foreground="?selectableItemBackground"
android:gravity="center"
android:padding="16dp"
android:text="Click here to toggle expansion" />
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#00b300"
android:clipToPadding="false"
android:elevation="4dp"
android:gravity="center"
android:text="Fixed height"
android:textColor="#fff"
app:layout_expandable="true" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#00f"
android:gravity="center"
android:text="Fill height"
android:textColor="#fff"
app:layout_expandable="false" />
</net.cachapa.expandablelayout.ExpandableLinearLayout>
因為繼承LinearLayout ,所以水平還是垂直看你的需要,其他就沒區別了
然後哪個節點需要伸縮,設定下
app:layout_expandable="true"
就行true就是支援,false就是不支援,很簡單。
還有2個自定義標籤,這裡也說下
app:el_duration="1000"
app:el_expanded="true"
一個用於動畫設定時間,一個設定可見不可見。
app:el_duration預設 300
app:el_expanded預設 false
大致講下如何實現,試圖組計算位置擺放等操作和普通LinearLayout沒什麼區別,動畫使用ValueAnimator動畫來處理的預設動畫結束後做 view.setVisibility(GONE) 或者view.setVisibility(View.VISIBLE)操作。
那如何設定動態設定顯示or隱藏效果呢?
呼叫
expandableLayout.toggle();
它會自動判斷當前的狀態然後走 相應邏輯,使用非常的簡單