2

誰かが私を助けてくれることを願っています。これは私を何日も夢中にさせてきました。

ユーザーがを使用して次の画面にスワイプして前の画面に戻ることができるWebビューを使用してアプリケーションを設計しています

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;
            }

ここで、scrollDownとscrollUpをスムーズに実行したいと思います。信頼できる答えがあれば、コメントをいただければ幸いです。

そして最後に下にスクロールするために使用しました:

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;   
            }
4

1 に答える 1

1

ジェスチャを使用する場合はScrollView、独自の顧客実装を作成せずにを使用しないでください。

にジェスチャが必要な場合はScrollView、独自のカスタムクラスを作成し、fromをScrollViewオーバーライドして、必要な処理を実行する必要があります。onTouchEventView

お役に立てれば!

于 2011-08-25T14:51:00.603 に答える