2010-07-14 3 views
4

웹 뷰 컨트롤이 스 와이프를 감지하고 멀티 터치 줌을 할 수 있고 빌드 줌 컨트롤을 사용할 수있는 방법이 있습니까?플리퍼를 사용하여 멀티 터치로 스 와이프 동작을 감지하는 방법

+0

자신의 질문에 답하는 데는 아무런 문제가 없지만 모든 질문을 던지기보다는 질문을 제기하고 답변을 입력하는 것이 좋을 것입니다. 이렇게하면 사람들이 귀하의 솔루션에 쉽게 응답하고 문제점에 대한 대체 솔루션을 제공 할 수 있습니다. –

+0

전형적으로 이것은 질문이 아닙니다.하지만 저는 그것을 할 것입니다. 그것은 더 명백 할 것입니다. – weakwire

답변

5

는 YES! 웹보기를 구현하고 사용자 정의 웹보기를 작성 이 방법으로 사용자 정의 웹보기가 동시에 멀티 터치에 가진 슬쩍 감지에 구축하고 컨트롤 줌 구축하는 것이 일을하는 방법이있다. 여기

//Declaring the custom Webview and put into a viewflipper 


MyWebView[] webview =new MyWebView[2]; 
    flipper = (ViewFlipper) findViewById(R.id.ViewFlipper); 

webview[i] = new MyWebView(this); 
webview[i].setWebViewClient(new HelloWebViewClient()); 
webview[i].getSettings().setJavaScriptEnabled(false); 
webview[i].setInitialScale(60); 
webview[i].getSettings().setBuiltInZoomControls(true); 

    flipper.addView(webview[0]); 
    flipper.addView(webview[1]); 

사용자 정의 웹보기

public class MyWebView extends WebView { 
    public MyWebView(Context context) { 
    super(context); 
    } 



@Override 
    public boolean onTouchEvent(MotionEvent evt) { 

     boolean consumed = super.onTouchEvent(evt); 
    if (isClickable()) { 
     switch (evt.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     lastTouchX = evt.getX(); 
     lastTouchY = evt.getY(); 
     downXValue = evt.getX(); 
     downTime = evt.getEventTime(); 
     hasMoved = false; 
     break; 
    case MotionEvent.ACTION_MOVE: 
     hasMoved = moved(evt); 
     break; 
    case MotionEvent.ACTION_UP: 
     float currentX = evt.getX(); 
      long currentTime = evt.getEventTime(); 
      float difference = Math.abs(downXValue - currentX); 
      long time = currentTime - downTime; 

      Log.i("Touch Event:", "Distance: " + difference + "px Time: " + time + "ms"); 

      if ((downXValue < currentX) && (time < 220) && (difference > 100)) { 
       go_back(); 
      } 



      if ((downXValue > currentX) && (time < 220) && (difference > 100)) { 
        go_forward(); 


        } 

       //if (!moved(evt)) performClick(); 
       break; 
      } 
     } 
     return consumed || isClickable(); 
    } 
    float downXValue; 
    long downTime; 
    private float lastTouchX, lastTouchY; 
    private boolean hasMoved = false; 
    private boolean moved(MotionEvent evt) { 
     return hasMoved || 
      Math.abs(evt.getX() - lastTouchX) > 10.0 || 
      Math.abs(evt.getY() - lastTouchY) > 10.0; 
    } 

} 

입니다 그리고 그 It.You이 슬쩍 detection.Code에 빌드가있어 약간의 "의사"에 있고 그것을 청소하지만, onTouchEvent를 오버라이드 (override)하지 않은 MotionEvent.ACTION_MOVE에 있고 MotionEvent.ACTION_UP이 트릭을해야합니다. 또한 시간과 차이 범위로 재생할 수 있습니다.

+0

나는 이것을 시도했지만 확대/축소에 문제가된다. 원래 크기로 다시 확대 할 때 웹 뷰 크기를 다시 설정합니다. – MegaNairda

관련 문제