
一切都正常,除了我想滚动整个视图滚动内容在collapsingbarlayout
这是xml布局:
<?xml version="1.0" enCoding="utf-8"?><androID.support.v4.Widget.DrawerLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" androID:ID="@+ID/drawer_layout" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:fitsSy@R_404_6563@windows="true"> <androID.support.design.Widget.CoordinatorLayout androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:fitsSy@R_404_6563@windows="true"> <androID.support.design.Widget.AppbarLayout androID:ID="@+ID/appbar" androID:layout_wIDth="match_parent" androID:layout_height="420dp" androID:theme="@style/themeOverlay.AppCompat.Dark.Actionbar" androID:fitsSy@R_404_6563@windows="true"> <androID.support.design.Widget.CollapsingToolbarLayout androID:ID="@+ID/collapsing_toolbar" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:contentScrim="?attr/colorPrimary" app:expandedTitlemarginStart="48dp" app:expandedTitlemarginEnd="64dp" androID:fitsSy@R_404_6563@windows="true"> <androID.support.v4.vIEw.VIEwPager xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/pager" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:scaleType="centerCrop" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplIEr="0.8" androID:fitsSy@R_404_6563@windows="true" app:layout_behavior="@string/appbar_scrolling_vIEw_behavior" /> <androID.support.v7.Widget.Toolbar androID:ID="@+ID/toolbar" androID:layout_wIDth="match_parent" androID:layout_height="?attr/actionbarSize" app:popuptheme="@style/themeOverlay.AppCompat.light" app:layout_collapseMode="pin" /> </androID.support.design.Widget.CollapsingToolbarLayout> </androID.support.design.Widget.AppbarLayout> <androID.support.v4.Widget.nestedScrollVIEw androID:ID="@+ID/scroll_vIEw" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:clipTopadding="false" app:layout_behavior="@string/appbar_scrolling_vIEw_behavior"> <include layout="@layout/activity_item_detail" /> </androID.support.v4.Widget.nestedScrollVIEw> <androID.support.design.Widget.floatingActionbutton androID:ID="@+ID/fab_button" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_margin="@dimen/activity_vertical_margin" androID:clickable="true" androID:src="@androID:drawable/ic_menu_call" app:layout_anchor="@+ID/appbar" app:layout_anchorGravity="bottom|right|end" /> </androID.support.design.Widget.CoordinatorLayout> <androID.support.design.Widget.NavigationVIEw androID:ID="@+ID/navigation_vIEw" androID:layout_wIDth="wrap_content" androID:layout_height="match_parent" androID:layout_gravity="start" app:headerLayout="@layout/drawer_header" app:menu="@menu/drawer"/></androID.support.v4.Widget.DrawerLayout>
如果触摸任何除了vIEwpager /工具栏之外的任何内容,滚动内容.
我也需要在浏览页面上垂直触摸和滚动滚动体验.
已经尝试覆盖VIEwTager的ontouchEvent,将ACTION_UP运动事件传递给scroll_vIEw.
nestedScrollVIEw.post(new Runnable() { @OverrIDe public voID run() { mPager.setontouchListener(new VIEw.OntouchListener() { @OverrIDe public boolean ontouch(VIEw v,MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { return nestedScrollVIEw.ontouchEvent(event); } else { return v.ontouchEvent(event); } } }); }}); 但它不行.请帮助解决方法/任何可以快速解决这个问题的黑客.
解决方法 查看正在接收触摸事件的视图.在这种具体情况下,VIEwPager正在接收我们要覆盖的触摸事件.一旦您看到接收触摸事件的视图,您可以安装手势检测器.看看这个 guide,特别是在Detecting a Subset of Supported Gestures
以这种方式,您可以管理在外部视图上执行的所有手势,您可以以某种方式对手势做出反应.
注意:当您扩展GestureDetector.SimpleOnGestureListener时,请注意覆盖onDown方法,否则将不会得到任何其他事件.
编辑
我已经在这个github project测试了我的建议.如果您以这种方式修改了CheeseDetailActivity,那么当您在奶酪图像中滚动时,您将获得调用的onScroll事件.
public class CheeseDetailActivity extends AppCompatActivity { public static final String EXTRA_name = "cheese_name"; private GestureDetectorCompat mDetector; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_detail); MyGestureListener Listener = new MyGestureListener(); mDetector = new GestureDetectorCompat(this,new MyGestureListener()); VIEw root = findVIEwByID(R.ID.pager); root.setontouchListener(new VIEw.OntouchListener() { @OverrIDe public boolean ontouch(VIEw v,MotionEvent event) { return mDetector.ontouchEvent(event); } }); Intent intent = getIntent(); final String cheesename = intent.getStringExtra(EXTRA_name); final Toolbar toolbar = (Toolbar) findVIEwByID(R.ID.toolbar); setSupportActionbar(toolbar); getSupportActionbar().setdisplayHomeAsUpEnabled(true); CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findVIEwByID(R.ID.collapsing_toolbar); collapsingToolbar.setTitle(cheesename); loadBackdrop(); } private voID loadBackdrop() { final ImageVIEw imageVIEw = (ImageVIEw) findVIEwByID(R.ID.backdrop); GlIDe.with(this).load(Cheeses.getRandomCheeseDrawable()).centerCrop().into(imageVIEw); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.sample_actions,menu); return true; } class MyGestureListener extends GestureDetector.SimpleOnGestureListener { private static final String DEBUG_TAG = "Gestures"; @OverrIDe public boolean onDown(MotionEvent event) { Log.d(DEBUG_TAG,"onDown: " + event.toString()); return true; } @OverrIDe public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY) { Log.d(DEBUG_TAG,"onScroll: "); //Implement functionality you want e.g. horiontal scroll changes vIEwpager item,vertical scroll collpases the toolbar return true; } }} 总结 以上是内存溢出为你收集整理的android – 将滚动事件传递到另一个视图全部内容,希望文章能够帮你解决android – 将滚动事件传递到另一个视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)