在Android中,BottomSheet是一種常見的UI組件,用于在屏幕底部顯示額外的內容。為了實現BottomSheet的動畫過渡,你可以使用CoordinatorLayout和AppBarLayout。以下是一個簡單的示例,展示了如何為BottomSheet添加動畫過渡效果:
build.gradle
文件中添加Material Design庫的依賴項(如果你還沒有添加的話):dependencies {
implementation 'com.google.android.material:material:1.4.0'
}
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<!-- 在這里添加你的BottomSheet內容 -->
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
public class MainActivity extends AppCompatActivity {
private BottomSheetBehavior<?> bottomSheetBehavior;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout bottomSheet = findViewById(R.id.bottom_sheet);
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
// 設置初始狀態為展開或折疊
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
// 添加狀態改變監聽器
bottomSheetBehavior.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// 處理狀態改變
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// 處理滑動
}
});
// 為BottomSheet添加動畫過渡效果
bottomSheetBehavior.setEnterAnim(R.anim.slide_in_bottom);
bottomSheetBehavior.setExitAnim(R.anim.slide_out_bottom);
}
}
res/anim
目錄下創建兩個動畫文件:slide_in_bottom.xml
和slide_out_bottom.xml
。例如:slide_in_bottom.xml
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="100%"
android:toYDelta="0"
android:duration="300"/>
</set>
slide_out_bottom.xml
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="-100%"
android:duration="300"/>
</set>
現在,當你打開或關閉BottomSheet時,它將以指定的動畫效果進行過渡。你可以根據需要自定義動畫效果和持續時間。