如何为sothree滑动面板库的SlidingUpPanelLayout实现PanelSlideListener
如何为SlidingUpPanelLayout添加PanelSlideListener检测滑动事件
嘿,这事儿好办!你已经拿到了SlidingUpPanelLayout的实例,接下来只需要给它添加PanelSlideListener,就能精准捕捉面板的滑起、滑下还有滑动过程中的状态变化啦~
我给你两种实现方式,按需选就行:
方式一:用匿名内部类快速实现
适合逻辑简单的场景,直接在初始化代码后面加这段:
// 你的初始化代码 mLayout = (SlidingUpPanelLayout) findViewById(R.id.activity_main); // 绑定滑动监听器 mLayout.addPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) { // 面板滑动时会持续触发这个方法,slideOffset取值0(完全收起)到1(完全展开) // 比如你可以根据偏移量调整其他控件的透明度、位置啥的 } @Override public void onPanelStateChanged(View panel, SlidingUpPanelLayout.PanelState previousState, SlidingUpPanelLayout.PanelState newState) { // 面板状态切换时触发,比如从收起变展开,或者从拖拽变静止 if (newState == SlidingUpPanelLayout.PanelState.EXPANDED) { // 面板完全展开后要做的事,比如显示隐藏的按钮、加载详情数据 } else if (newState == SlidingUpPanelLayout.PanelState.COLLAPSED) { // 面板完全收起后要做的事,比如收起弹窗、保存临时数据 } } });
方式二:让Activity/Fragment实现接口(代码更规整)
如果你的监听逻辑比较复杂,或者需要在多个地方复用,让你的页面类实现PanelSlideListener接口会更清晰:
public class MainActivity extends AppCompatActivity implements SlidingUpPanelLayout.PanelSlideListener { private SlidingUpPanelLayout mLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化面板 mLayout = (SlidingUpPanelLayout) findViewById(R.id.activity_main); // 绑定监听器到当前Activity mLayout.addPanelSlideListener(this); } @Override public void onPanelSlide(View panel, float slideOffset) { // 这里写滑动过程中的逻辑 } @Override public void onPanelStateChanged(View panel, SlidingUpPanelLayout.PanelState previousState, SlidingUpPanelLayout.PanelState newState) { // 这里写状态切换的逻辑 } }
另外给你提个醒,PanelState常用的几种状态可以重点关注:
COLLAPSED:面板完全收起EXPANDED:面板完全展开DRAGGING:用户正在拖拽面板ANCHORED:如果设置了锚点高度,面板停在锚点位置的状态
内容的提问来源于stack exchange,提问作者joshua julius
相关产品推荐
相关产品推荐

