আমার এই একই সমস্যা ছিল এবং আমাকে এটি কাজ করতে হয়েছিল। আমি এই সমাধানগুলি চেষ্টা করেছিলাম, তবে শেষে পারফরম্যান্সটি, কমপক্ষে স্ক্রোলিংয়ের জন্য মোটেই উন্নতি হয়নি। সুতরাং এখানে আমি যে পরিশ্রম সম্পাদন করেছি এবং কেন এটি আমার জন্য কাজ করেছে তার ব্যাখ্যা।
আপনার যদি "মিউউইভিভিউ" ক্লাস তৈরি করে "অন টাচইভেন্ট" পদ্ধতিটি ওভাররাইট করে এবং প্রতিটি ড্র্যাগ ইভেন্টটি ঘটে থাকে সেই সময়টিতে কমপক্ষে মুদ্রণ করার সময় আপনি যদি ড্র্যাগ ইভেন্টগুলি অন্বেষণ করার সুযোগ পান তবে আপনি দেখতে পাবেন যে সেগুলি পৃথক হয়ে গেছে সময় অনুযায়ী (নিচে থেকে) 9ms দূরে। ইভেন্টগুলির মধ্যে এটি খুব অল্প সময়ের মধ্যে।
কটাক্ষপাত ওয়েবদৃশ্য সোর্স কোড , এবং শুধুমাত্র onTouchEvent ফাংশন দেখুন। প্রসেসর দ্বারা এটি 9 এমএসেরও কম সময়ে পরিচালনা করা অসম্ভব (স্বপ্ন দেখতে থাকুন !!!)। এ কারণেই আপনি ক্রমাগত "মিস ড্র্যাগ মিস্ হওয়ায় আমরা স্পর্শ ডাউন হওয়ার জন্য ওয়েবকোরের প্রতিক্রিয়ার জন্য অপেক্ষা করছি।" বার্তা। কোডটি ঠিক সময়ে হাতে নেওয়া যায় না।
কিভাবে ঠিক হবে এটা? প্রথমত, আপনি এটির উন্নতি করার জন্য অন টাচ ইভেন্ট কোডটি পুনরায় লিখতে পারবেন না, এটি কেবল খুব বেশি। তবে, চলনগুলি টেনে নিয়ে যাওয়ার ইভেন্টের হারকে সীমাবদ্ধ করতে আপনি "এটি উপহাস" করতে পারেন চলুন 40 মিমি বা 50 মিমি বলি। (এটি প্রসেসরের উপর নির্ভর করে)।
সমস্ত স্পর্শ ইভেন্টগুলি এরকম হয়: ACTION_DOWN -> ACTION_MOVE ...... ACTION_MOVE -> ACTION_UP। সুতরাং আমাদের ডাউন এবং ইউপি চলাচল রাখা এবং চলমান হার ফিল্টার করা দরকার (এগুলি খারাপ লোক)।
এবং এটি করার একটি উপায় এখানে রয়েছে (আপনি 2 আঙ্গুলের স্পর্শের মতো আরও ইভেন্টের ধরণ যুক্ত করতে পারেন, আমি এখানে আগ্রহী সমস্তই একক আঙুলের স্ক্রোলিং)।
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;
}
}
অবশ্যই ওয়েবভিউয়ের পরিবর্তে এই শ্রেণিটি ব্যবহার করুন এবং আপনি স্ক্রোল করার সময় পার্থক্যটি দেখতে পাবেন।
এটি কেবলমাত্র একটি সমাধানের জন্য একটি দৃষ্টিভঙ্গি, তবুও ওয়েবভিউ ব্যবহার করার সময় পর্দা স্পর্শের কারণে সমস্ত পিছিয়ে থাকা মামলার জন্য এখনও পুরোপুরি প্রয়োগ করা হয়নি। তবে এটি আমার সন্ধানের সেরা সমাধান, কমপক্ষে আমার নির্দিষ্ট প্রয়োজনের জন্য।