如何在Android中使用滚动模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Android中使用滚动模式相关的知识,希望对你有一定的参考价值。
Problem
我需要优先在我的Activity中滚动事件。
我正在使用aiCharts(图表库),我需要在我的区域上进行缩放,平移等。没有任何ScrollViews
它工作正常,但是,如果我使用提到的Layout
,这些功能很糟糕。我认为因为观点的优先权。
Possible solution
我试图在需要位于setOverScrollMode(View.OVER_SCROLL_ALWAYS);
和ScrollView
“顶部”但不能正常工作的视图上使用HorizontalScrollView
。
Layout
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RelativeLayout
android:id="@+id/screen_relative_layout"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
</RelativeLayout>
</HorizontalScrollView>
</ScrollView>
通过添加到RelativeLayout以编程方式添加我的所有视图。
答案
更改您的RelativeLayout,以便android:layout_height="wrap_content"
也可以自己定制滚动视图,以便拦截移动而不是其他内容:
public class VerticalScrollView extends ScrollView {
private float xDistance, yDistance, lastX, lastY;
public VerticalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
lastX = ev.getX();
lastY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - lastX);
yDistance += Math.abs(curY - lastY);
lastX = curX;
lastY = curY;
if(xDistance > yDistance)
return false;
}
return super.onInterceptTouchEvent(ev);
}
}
让我知道它是如何工作的!
以上是关于如何在Android中使用滚动模式的主要内容,如果未能解决你的问题,请参考以下文章
在 CoordinatorLayout Android 中的 ViewPager 片段中使用 NestedScrollView 突然滚动