我希望有一个人可以帮助我。这几天让我发疯。
我正在使用 webview 设计一个应用程序,它允许用户使用滑动到下一个屏幕并返回到上一个屏幕
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY)
如果屏幕上无法容纳的内容更多,我还希望使用户能够从屏幕的顶部滚动到底部。所以,我在 main.xml 文件中有:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="800px"
android:background="#ffffff">
<ScrollView android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff">
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:scrollbars="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"/>
</ScrollView>
</LinearLayout>
问题是滚动视图现在不起作用。在我拥有手势检测器之前,我使用 javascript 启用滑动检测,但用户必须非常准确地使用左右和左右滑动操作。
我认为问题在于允许gestureDetector工作的代码 - 感谢发布该内容的贡献者:
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
String url = findURL();
if (event1.getRawX() > event2.getRawX()) {
if(isButtonScreen(url)==false){
//get next SCREEN to display
getNext(url);
}else{
}
} else {
if(isButtonScreen(url)==false)
{
//get previous
getPrevious(url);
}else{
}
}
return true;
}
我认为它表示如果用户从右向左滑动,则显示下一页,否则显示上一页。
我想要更清楚一点,如果用户在一定程度上从左向右滑动,则显示下一页,或者如果用户在一定程度上从右向左滑动,则显示上一页,否则,向上滚动或向下滚动.
这是我应该怎么做的吗?还是我错过了一些基本的东西,它应该以其他明显的方式工作?
谢谢
对不起,把我自己的回复发错地方了。到目前为止,我有一个检查,看看它是一扔还是卷轴,如下所示:
//check if it is a swipe or a scroll
public String isSwipe(MotionEvent event1, MotionEvent event2){
String swipeDirection = "";
double X = event1.getRawX()-event2.getRawX();
double Y = event1.getRawY()-event2.getRawY();
double Z = Math.round(Math.sqrt(Math.pow(X,2)+Math.pow(Y,2))); //the distance - rounded - in pixels
double r = Math.atan2(Y,X); //angle in radians (Cartesian system)
double swipeAngle = Math.round(r*180/Math.PI); //angle in degrees
if ( swipeAngle < 0 ) { swipeAngle = 360 - Math.abs(swipeAngle); }
if ( (swipeAngle <= 45) && (swipeAngle >= 0) ) {
swipeDirection = "left";
} else if ( (swipeAngle <= 360) && (swipeAngle >= 315) ) {
swipeDirection = "left";
} else if ( (swipeAngle >= 135) && (swipeAngle <= 225) ) {
swipeDirection = "right";
} else if ( (swipeAngle > 45) && (swipeAngle < 135) ) {
swipeDirection = "up";
} else {
swipeDirection = "down";
}
return swipeDirection;
}
现在我想平滑地向下滚动和向上滚动。如果有人有可靠的答案,我将非常感谢您的评论。
最后向下滚动我使用:
scrollBy(0, 50);
一旦我很高兴,我实际上是在向下滑动。
它不像我想要的那么顺利,所以如果有人对此有任何改进,我会很高兴。
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
String url = findURL();
if (event1.getRawX() > event2.getRawX()) {
if(isButtonScreen(url)==false){
//get next
//getNext(url);
show_toast("swipe left"+isSwipe(event1, event2));
}else{
}
} else {
if(isButtonScreen(url)==false){
//get previous
//getPrevious(url);
String result = isSwipe(event1, event2);
show_toast("swipe right "+result);
if(result.equalsIgnoreCase("down")){
//screen height + 50;
scrollBy(0, 50);
}
}else{
}
}
return true;
}