キャンバスで実行される JavaScript アプリケーションがあります。Android でも動作しますが、指で画面上をドラッグすると Web ページ全体がフリーズします。これが発生しないようにする方法はありますか?
4 に答える
あなたの質問を表現する方法は、かなり豊富な情報を示しているわけではありません。
Web アプリには、android の完全な機能を取得するためのいくつかの制限があります。
あなたのステートメントI have a javascript application that runs in a canvas 、最初の外観では、アプリケーションで Android canvas を使用しているようです。
ここにリンクがあります
Androidでhtml5キャンバスを実行するのに役立ちます
それは、コードで a と MOVE で何をするかによって異なりますMotionEvent.ACTION_DOWN
...キャンバスを描画するルーチンが必要です。そのルーチンは、他のルーチンによって中断されるべきではありません。
これで問題が解決するかどうか、または洞察が得られるかどうかはわかりませんが、ここに行きます;
例えば;
protected void onDraw(Canvas canvas) {
// fills the canvas with black
canvas.drawColor(Color.BLACK);
// draw some stuff on it
backGnd.draw(canvas);
basket.draw(canvas);
for (int i = 0; i < AppleList.size();i++){
AppleList.get(i).draw(canvas);
}
}
motionevent は次のように処理されます (コード内のコメントに注意してください!)。
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isTouchDisabled){
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// add code to pass the action down to the objects
basket.handleActionDown((int)event.getX(), (int)event.getY());
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// the gestures
// only pass the move events to the objects that were previously touched (so action down entails checking for
// the location of the touch AND the object.. if they match, you set isTouched to true.
if (basket.isTouched()) {
// the basket was picked up and is being dragged
basket.setX((int)event.getX());
basket.setY((int)event.getY());
}
}
if (event.getAction() == MotionEvent.ACTION_UP) {
// Check buttons
if (btnMoreFruit.isTouched()){
btnMoreFruit.handleActionUp((int) event.getX(), (int) event.getY());
btnMoreFruit.setTouched(false);
}
if (btnLessFruit.isTouched()){
btnLessFruit.handleActionUp(this.getContext(), (int)event.getX(), (int)event.getY());
btnLessFruit.setTouched(false);
}
}
}
コードの内容によっては、誰かがキャンバス上で指 (またはマウス) をドラッグすると、多くの処理が行われる可能性があります。たとえば、ペイント アプリでは、ピクセルが変更されるたびに、ユーザーのフォーカスの XY 位置がキャプチャされます。これらの各小さなイベント内のコードが軽くない場合、クライアントは追いつくためにハングアップします。
Android は、canvas と javascript の処理がかなり苦手です。おそらくこれがフリーズする理由でもあります。