要实现Android的BottomSheet覆盖一半的锚定ImageView,可以按照以下步骤进行操作:
import com.google.android.material.bottomsheet.BottomSheetBehavior;
public class YourActivity extends AppCompatActivity {
private BottomSheetBehavior bottomSheetBehavior;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
// 获取BottomSheet控件
LinearLayout bottomSheetLayout = findViewById(R.id.bottomSheetLayout);
// 设置BottomSheet的最大高度为屏幕高度的一半
int screenHeight = getResources().getDisplayMetrics().heightPixels;
ViewGroup.LayoutParams layoutParams = bottomSheetLayout.getLayoutParams();
layoutParams.height = screenHeight / 2;
bottomSheetLayout.setLayoutParams(layoutParams);
// 初始化BottomSheetBehavior
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetLayout);
bottomSheetBehavior.setHideable(true);
bottomSheetBehavior.setPeekHeight(layoutParams.height);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
// 设置ImageView的点击事件,点击时显示/隐藏BottomSheet
ImageView anchorImageView = findViewById(R.id.anchorImageView);
anchorImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
} else {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
}
});
}
}
通过上述代码,当点击ImageView时,BottomSheet会从底部滑动出现覆盖一半的锚定ImageView,再次点击ImageView时,BottomSheet会滑动回底部隐藏起来。