我是Android开发的新手,我一直坚持以下问题。我一直在努力工作几天而无法找到解决方案。在这个问题中,我正在解释我已经采取了哪些步骤来实施。请查看我的程序,并建议一个解决方案或即兴创作或另一种方法来处理这个问题。
我想设计一个分为三个部分的屏幕。我的屏幕结构如下:
整个屏幕的父布局是Scroll-View。布局文件的粗略结构是:
<ScrollView>
<!-- Other Views (Part: 1) -->
<RelativeLayout>
<!-- Part 2 -->
<LinearLayout android:orientation = "vertical">
<LinearLayout android:orientation = "horizontal">
<Button1 /> <Button1 /> </Button3>
</LinearLayout>
<LinearLayout android:orientation = "horizontal">
<Button4 /> <Button5 /> </Button6>
</LinearLayout>
</LinearLayout>
<ImageView>
</RelativeLayout>
<!--Other Views (Part 3) -->
</ScrollView>
感兴趣的部分是相对布局的中间部分。我想要的东西 实施是:
我想检测此RelativeLayout上的滑动。因此,每次向左或向左滑动 我更新了这些按钮上的图像和文本。
我希望能够从屏幕上的任何位置滚动屏幕。
可以点击按钮。
现在让我告诉你我做了什么以及我面临的问题。为了检测相对布局上的滑动,我在相对布局上设置了onTouchListener。重写的onTouch方法是:
public boolean onTouch(View v, MotionEvent event) {
scrollview.requestDisallowInterceptTouchEvent(true);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
downY = event.getY();
return true;
}
case MotionEvent.ACTION_UP: {
if(v instanceof Button){
v.performClick();
}
upX = event.getX();
upY = event.getY();
float deltaX = downX - upX;
float deltaY = downY - upY;
// swipe horizontal?
if (Math.abs(deltaX) > MIN_DISTANCE) {
// left or right
if (deltaX < 0) {
this.onLeftToRightSwipe();
return true;
}
if (deltaX > 0) {
this.onRightToLeftSwipe();
return true;
}
}
}
}
return false;
}
因为按钮占据了相对布局的所有空间,所以我必须设置此监听器
所有内部线性布局和按钮。要检测按钮单击并禁止滚动视图截取,我必须包含scrollview.requestDisallowInterceptTouchEvent(true)
。
但问题是,现在我无法滚动此相对布局。
滑动和按钮单击操作完全正常,但现在它没有检测到滚动。
如果我删除scrollview.requestDisallowInterceptTouchEvent(true)
,则会检测到滚动,但滑动不会。这给用户带来了非常糟糕的体验,并且总体上给出了我向所有人展示应用程序的负面反馈。
所以我想要的是,用户应该能够从屏幕的任何一点滚动,他应该能够在相对布局上滑动,也可以点击按钮。
请帮忙!可能的解决方案是否可以:
1)实现simpleOnGesture Listener或Detector?覆盖投掷事件?请提供有价值且有用的指示。
答案 0 :(得分:1)
我建议您使用ViewPager来完成此任务。您可以从以下链接了解有关ViewPagers的更多信息:http://developer.android.com/training/animation/screen-slide.html
网站上还有一个示例代码,您可以看到它是如何工作的。它允许您滑动页面并在每页中向下滚动。
所以main.xml文件如下所示:
<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" />
fragment.xml文件如下所示:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView android:id="@android:id/text1"
style="?android:textAppearanceLarge"
android:textStyle="bold"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp" />
<TextView style="?android:textAppearanceMedium"
android:lineSpacingMultiplier="1.2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/lorem_ipsum" />
</LinearLayout>
</ScrollView>