devise支持库BottomSheetBehavior介绍了BottomSheetBehavior ,它允许一个协调器的孩子充当最底层(从屏幕底部可以拖动的视图)。 我想要做的是, 作为底部视图 ,有以下视图(典型的协调员+崩溃的东西): <CoordinatorLayout app:layout_behavior=“@string/bottom_sheet_behavior”> <AppBarLayout> <CollapsingToolbarLayout> <ImageView /> </CollapsingToolbarLayout> </AppBarLayout> <NestedScrollView> <LinearLayout> < Content … /> </LinearLayout> </NestedScrollView> </CoordinatorLayout> 不幸的是,底部视图应该实现嵌套滚动,否则他们不会得到滚动事件。 如果您尝试使用主要活动,然后将此视图作为底部表单加载,则会看到滚动事件仅作用于“纸张”上,出现了一些奇怪的行为,您可以看到是否继续阅读。 我很确定这可以通过inheritanceCoordinatorLayout来处理,或者通过BottomSheetBehavior 。 你有什么提示吗? 一些想法 应该使用requestDisallowInterceptTouchEvent()来在某些情况下从父requestDisallowInterceptTouchEvent()中窃取事件: 当AppBarLayout偏移量> 0时 当AppBarLayout偏移量是== 0,但我们正在滚动(想一下,你会看到) 第一个条件可以通过设置OnOffsetChanged到内部的应用程序栏获得; 第二个需要一些事件处理,例如: switch (MotionEventCompat.getActionMasked(event)) { case MotionEvent.ACTION_DOWN: startY = event.getY(); lastY = startY; userIsScrollingUp = false; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: userIsScrollingUp […]
在我的应用程序中,我需要处理移动和点击事件。 点击是一个ACTION_DOWN动作,几个ACTION_MOVE动作和一个ACTION_UP动作的序列。 理论上,如果你得到一个ACTION_DOWN事件,然后是一个ACTION_UP事件 – 这意味着用户只是点击你的视图。 但实际上,这个顺序在某些设备上不起作用。 在我的三星Galaxy Gio上,当我点击我的View:ACTION_DOWN,几次ACTION_MOVE,然后ACTION_UP时,我得到这样的序列。 即我用ACTION_MOVE操作代码得到了一些令人意想不到的OnTouchEvent触发器。 我从来没有(或几乎从来没有)序列ACTION_DOWN – > ACTION_UP。 我也不能使用OnClickListener,因为它没有给出点击的位置。 那么如何检测点击事件并将其与移动不同呢?
经过对onTouchEvent和onTouch的多次实验之后,我发现onTouch可以在任何地方工作(无论是在活动还是在视图中),只要您声明了界面并将Listener放在正确的位置即可! 另一方面,onTouchEvent只能在View中使用! 我的假设是否正确? 这是真正的区别吗?