나는이 같은 문제가 있었고 그것을 해결해야했습니다. 나는이 솔루션을 시도했지만 결국 스크롤링의 성능은 전혀 향상되지 않았습니다. 그래서 여기에 내가 수행 한 작업과 그것이 나를 위해 일한 이유에 대한 설명이 있습니다.
"MiWebView"클래스를 작성하고 "onTouchEvent"메소드를 덮어 쓰고 최소한 모든 드래그 이벤트가 발생하는 시간을 인쇄하여 드래그 이벤트를 탐색 할 기회가있는 경우, 분리 된 것을 볼 수 있습니다 9ms 떨어진 시간까지. 이벤트 사이에 아주 짧은 시간입니다.
WebView 소스 코드를 살펴보고 onTouchEvent 함수를 참조하십시오. 프로세서가 9ms 미만으로 처리하는 것은 불가능합니다. 그렇기 때문에 "WebCore의 터치 다운에 대한 응답을 기다리는 동안 드래그가 발생하지 않습니다." 메시지. 코드는 제 시간에 처리 할 수 없습니다.
고치는 방법? 첫째, onTouchEvent 코드를 다시 작성하여 향상시킬 수는 없습니다. 그러나 움직임을 드래그하는 이벤트 속도를 40ms 또는 50ms로 제한하기 위해 "모의"할 수 있습니다. (프로세서에 따라 다름)
모든 터치 이벤트는 다음과 같습니다 : ACTION_DOWN-> ACTION_MOVE ...... ACTION_MOVE-> ACTION_UP. 따라서 우리는 DOWN 및 UP 움직임을 유지하고 MOVE 비율을 필터링해야합니다 (이것은 나쁜 사람들입니다).
그리고 여기에 그것을하는 방법이 있습니다 (두 손가락 터치와 같은 더 많은 이벤트 유형을 추가 할 수 있습니다. 여기서 관심있는 것은 단일 손가락 스크롤뿐입니다).
import android.content.Context;
import android.view.MotionEvent;
import android.webkit.WebView;
public class MyWebView extends WebView{
public MyWebView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
private long lastMoveEventTime = -1;
private int eventTimeInterval = 40;
@Override
public boolean onTouchEvent(MotionEvent ev) {
long eventTime = ev.getEventTime();
int action = ev.getAction();
switch (action){
case MotionEvent.ACTION_MOVE: {
if ((eventTime - lastMoveEventTime) > eventTimeInterval){
lastMoveEventTime = eventTime;
return super.onTouchEvent(ev);
}
break;
}
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP: {
return super.onTouchEvent(ev);
}
}
return true;
}
}
물론 WebView 대신이 클래스를 사용하면 스크롤 할 때 차이점이 나타납니다.
이것은 솔루션에 대한 접근 방식이지만 WebView를 사용할 때 화면 터치로 인해 모든 지연 사례에 대해 완전히 구현되지는 않았습니다. 그러나 적어도 내 특정한 요구에 대해서는 내가 찾은 최고의 솔루션입니다.