0
我已經實現了一個ViewPager在片段之間滑動。問題是我想禁用分頁,直到滿足某些條件。我在下面展示的代碼幾乎可以正常工作,但它不允許在片段佈局中進行垂直滾動,我只想禁用水平滾動,即我的意思是片段之間的轉換。禁用片段中的水平滾動
我有包含自定義ViewPager如下的佈局:
layout_pager
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical" tools:context=".MyActivity">
<mypackage.CustomViewPager android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
和另一個佈局以定義片段的它實現了一個滾動型含量:
layout_fragment
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MyActivity">
<LinearLayout>
<!-- Some TextViews, Images, Buttons, etc -->
</LinearLayout>
</ScrollView>
活性剛剛分配適配器
MyActivity
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_pager);
CustomViewPager viewPager = (CusotmViewPager) findViewById(R.id.viewpager);
CustomAdapter adapter = new CustomAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
}
}
的CustomViewPager有一個標誌,以指示是否允許分頁
CustomViewPager
public class CustomViewPager extends ViewPager {
private boolean enabled;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
enabled = true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return enabled ? super.onInterceptTouchEvent(ev) : false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return enabled ? super.onTouchEvent(event) : false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
}
}
最後,片段截取觸摸事件以檢查條件是否滿足以啓用頁碼。
MyFragment
public class MyFragment extends Fragment {
public MyFragment() {}
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.layout_fragment, container, false);
final MyActivity myActivity = (MyActivity) getActivity();
rootView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_DOWN) {
View customViewPagerRoot = myActivity.findViewById(R.id.viewpager);
CustomViewPager viewPager = (CustomViewPager) customViewPagerRoot.findViewById(R.id.viewpager);
if (condition to allow the pagination) {
viewPager.setPagingEnabled(true);
} else {
viewPager.setPagingEnabled(false);
}
}
return true;
}
});
return rootView;
}
}
我希望我正確解釋這個問題,任何幫助,將不勝感激。
您的解決方案解決了垂直滾動的問題,但現在儘管片段之間不允許刷卡,屏幕一點移動小朝下一個片段 –