我有一个在canvas中运行的javascript应用程序。它在安卓设备上工作正常,但当你用手指在屏幕上拖动时,整个网页会冻结。有没有办法防止这种情况发生?
我有一个在canvas中运行的javascript应用程序。它在安卓设备上工作正常,但当你用手指在屏幕上拖动时,整个网页会冻结。有没有办法防止这种情况发生?
这取决于您在 MotionEvent.ACTION_DOWN
和 MOVE 中的代码操作... 您应该有一些绘制画布的例程。该例程不应被任何其他例程中断。
不确定这是否可以解决您的问题或提供任何见解,但是让我们来看看;
例如;
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);
}
}
}
Android 在处理画布和 JavaScript 方面表现得相当糟糕。可能这也是它经常会出现卡顿的原因。
根据您的代码内容,当用户在画布上拖动手指(或鼠标)时,可能会进行大量处理。例如,在绘画应用程序中,每次用户焦点的XY位置更改像素时都会被捕获。如果这些微小事件中的每个代码不轻便,客户端将在尝试追赶时挂起。
event.preventDefault()
调用? - antyrat