2011-08-25 4 views
1

누군가가 나를 도울 수 있기를 바랍니다. 이것은 날 동안 미쳐 버렸습니다.Scrollview (Webview)는 GestureDetector와 작동하지 않습니다.

I 사용자가 나는 또한 화면의 상단에서 하단으로 스크롤 사용자를 활성화 할

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> 

문제는 스크롤보기가 작동하지 않습니다. 제스처 감지기를 사용하기 전에 자바 스크립트를 사용하여 스 와이프 감지를 활성화했지만 사용자는 왼쪽 및 오른쪽 스 와이프 동작을 통해 매우 정확해야했습니다.

나는 문제이 (가) 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; 
      } 
+2

제스처와 관계없이 'ScrollView'안에 안정적으로 'WebView'(또는 스크롤되는 모든 것)을 넣을 수 없습니다. 귀하의 의견에 – CommonsWare

답변

1

제스처를 사용하려면 고객 구현을 직접 작성하지 않고 ScrollView을 사용하면 안됩니다. 당신이 ScrollView에서 동작을해야하는 경우

, 당신은 ScrollView를 구현하는 사용자 정의 클래스를 작성하고 당신이 원하는 것을 할 View에서 onTouchEvent를 오버라이드 (override) 할 필요가 있습니다.

희망이 도움이됩니다.

+0

감사합니다. 좋아, 아니 scrollview, 나는 ScrollTo (x, y)를 사용할 수 있지만이 위치로 점프.원활하게 작동하는 scrollDown 또는 scrollUp이 있습니까? –

+0

좋아, 그래서 그것이 fling 또는 스크롤인지 확인하는 방법을 만들었습니다, 그것은 다음과 같습니다 –