1. 程式人生 > >翻翻git之---可以收縮伸展的自定義LinearLayout ExpandableLinearLayout

翻翻git之---可以收縮伸展的自定義LinearLayout ExpandableLinearLayout

今天無意中看到個十分好用,而且效果類似於之前寫過的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();

它會自動判斷當前的狀態然後走 相應邏輯,使用非常的簡單