Dan*_*Dan 5 android android-viewpager
我的 Android ViewPager 已设置在边界外绘制视图(剪辑边界设置为 false)。我在页面上显示的所有视图上都有一个触摸事件侦听器。自定义视图显示在页面 1 上,绘制在其裁剪边界之外并溢出到页面 2。页面 1 上的触摸事件工作正常。滚动到第二页时,将显示剩余视图。问题是自定义视图(添加在页面 1 上)上的触摸事件在点击页面 2 时不会被调用。
PageViewActivity.cs
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setClipChildren(false);
mViewPager.setClipToPadding(false);
Run Code Online (Sandbox Code Playgroud)
PageViewFragment.cs
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.page_layout, container, false);
setHasOptionsMenu(true);
View view1=(View)v.findViewById(R.id.view1);
view1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "View clicked",Toast.LENGTH_SHORT).show();
}
});return v;
Run Code Online (Sandbox Code Playgroud)
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false" >
<View
android:id="@+id/view1"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginLeft="250dp"
android:layout_marginTop="20dp"
android:background="#ff0000" />
Run Code Online (Sandbox Code Playgroud)
片段布局 - page_layout.xml
有什么建议?
这里\xe2\x80\x99s有一个问题。我们只能滑动中间的视图。这是因为触摸事件发生在 ViewPagers 边界之外。我们可以重写ViewPagerContainer的onTouchEvent并将事件分派给ViewPager来解决这个问题。
\n\nprivate ViewPager mPager;\n\n@Override\nprotected void onFinishInflate() {\n mPager = (ViewPager) getChildAt(0);\n}\n\n@Override\npublic boolean onTouchEvent(MotionEvent ev) {\n return mPager.dispatchTouchEvent(ev);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但事实是,您最好使用更现代的解决方案来解决这些问题。
\n\n<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"\n xmlns:app="http://schemas.android.com/apk/res-auto"\n xmlns:tools="http://schemas.android.com/tools"\n android:id="@+id/main_content"\n android:layout_width="match_parent"\n android:layout_height="match_parent">\n\n <android.support.design.widget.AppBarLayout\n android:id="@+id/appbar"\n android:layout_width="match_parent"\n android:layout_height="wrap_content"\n android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">\n\n <android.support.design.widget.TabLayout\n android:id="@+id/result_tabs"\n android:layout_width="match_parent"\n android:layout_height="wrap_content"\n android:background="@color/grey"\n app:tabIndicatorColor="@color/colorPrimary"\n app:tabMode="scrollable"\n app:tabSelectedTextColor="@color/colorPrimary"\n app:tabTextColor="@color/medium_grey" />\n </android.support.design.widget.AppBarLayout>\n\n <android.support.v4.view.ViewPager\n android:id="@+id/viewpager"\n android:layout_width="match_parent"\n android:layout_height="match_parent"\n app:layout_behavior="@string/appbar_scrolling_view_behavior" />\n\n</android.support.design.widget.CoordinatorLayout>\nRun Code Online (Sandbox Code Playgroud)\n\n因此选项卡式布局和正确设置的视图页面。尽管一旦谷歌在其架构组件中完成了导航部分,这也将变得过时。
\n