本文只为记录,方法出自其他仙友,只做了业务逻辑的改动。
使用场景,ViewPager+fragment组合,当其中的某个fragment处于某种状态下,让ViewPager不能滑动(如,在fragment A 中弹了一个弹框,则此时让ViewPager不能滑动,弹框消失后,ViewPager继续可以滑动)。实现思路,自定义ViewPager,在ViewPager重写 onTouchEvent方法,同时在ViewPager中提供一个 方法setScroll(Boolean b)是否可以滑动。
同时在fragment中弹框状态变化时可以通过接口的方式通知activity的ViewPager是否可以滑动,ViewPager.setScroll();
代码如下:
import android.content.Context; import android.content.res.TypedArray; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; import com.goujin.android.smartcommunity.R; /** * Created by W.H.K * on 2019/6/5 */ public class MyViewPager extends ViewPager { public boolean isScroll = false; public boolean isScroll() { return isScroll; } public void setScroll(boolean scroll) { isScroll = scroll; } public MyViewPager(Context context) { super(context); } public MyViewPager(Context context, AttributeSet attrs) { super(context, attrs); TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyViewPager); /*获取布局中设置的属性*/ isScroll = array.getBoolean(R.styleable.MyViewPager_isScroll, false); array.recycle(); } @Override public boolean onTouchEvent(MotionEvent ev) { if (isScroll) { return super.onTouchEvent(ev); } return false; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (isScroll) { return super.onInterceptTouchEvent(ev); } return false; } } 同时在attrs添加:
<declare-styleable name="MyViewPager"> <attr name="isScroll" format="boolean" /> </declare-styleable>
布局文件:
<你的包名.MyViewPager android:id="@+id/activity_view_pager" android:layout_width="match_parent" android:layout_height="match_parent" app:isScroll="true" />
根据自己的业务逻辑自行灵活使用
------end。