Aynı sorunu yaşıyordum ve çözmek zorunda kaldım. Bu çözümleri denedim, ancak sonunda performans, en azından kaydırma için hiç iyileşmedi. Burada yaptığım geçici çözüm ve bunun benim için neden işe yaradığının açıklaması.
Bir "MiWebView" Sınıfı oluşturarak, "onTouchEvent" yönteminin üzerine yazarak ve en azından her sürükleme olayının gerçekleştiği zamanı yazdırarak sürükleme olaylarını keşfetme şansınız varsa, bunların ayrıldığını göreceksiniz 9ms uzakta (aşağı) kadar zamanında. Olaylar arasında çok kısa bir zaman.
WebView Kaynak Koduna bir göz atın ve sadece onTouchEvent işlevine bakın. İşlemci tarafından 9 ms'den daha az bir sürede ele alınması imkansızdır (Hayal kurmaya devam edin !!!). Bu yüzden sürekli "WebCore'un temasa yanıtını beklerken bir özledim özledim" görüyorsunuz. İleti. Kod zamanında işlenemez.
Nasıl düzeltebilirim? İlk olarak, iyileştirmek için onTouchEvent kodunu yeniden yazamazsınız, çok fazladır. Ancak, sürükleme hareketleri için olay hızını 40ms veya 50ms olarak sınırlamak için "alay edebilirsiniz". (bu işlemciye bağlıdır).
Tüm dokunma etkinlikleri şu şekildedir: ACTION_DOWN -> ACTION_MOVE ...... ACTION_MOVE -> ACTION_UP. Bu yüzden AŞAĞI ve YUKARI hareketlerini korumamız ve MOVE oranını filtrelememiz gerekiyor (bunlar kötü adamlar).
Ve işte bunu yapmanın bir yolu (2 parmak dokunuşu gibi daha fazla olay türü ekleyebilirsiniz, burada ilgilendiğim tek şey tek parmak kaydırma).
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;
}
}
Tabii ki WebView yerine bu sınıfı kullanın ve kaydırma yaparken farkı göreceksiniz.
Bu sadece bir çözüme bir yaklaşımdır, ancak WebView kullanırken ekrana dokunma nedeniyle tüm gecikme durumları için tam olarak uygulanmamıştır. Ancak, en azından özel ihtiyaçlarım için bulduğum en iyi çözüm.