2012-04-09 49 views
5

Tôi có một ứng dụng javascript chạy trong canvas. Nó hoạt động trên Android, ngoại trừ khi bạn kéo trên màn hình với ngón tay của bạn toàn bộ trang web bị đóng băng. Có cách nào để ngăn chặn điều này xảy ra không?Android canvas đóng băng

+1

Nếu bạn che bức tranh của mình bằng div trong suốt thì sự cố vẫn xảy ra? Chỉ để xem liệu nó có chạm vào phần tử canvas hay không. – GillesC

+0

Hãy thử khi tôi về nhà, nhưng tôi nghĩ rằng vấn đề liên quan đến màn hình LCD đang cố gắng cuộn/thu phóng. Nó khóa ngay cả khi tôi kéo ngón tay của tôi ra khỏi khung hình. – Joel

+1

Có thể bạn có một số lệnh gọi 'event.preventDefault()' không cần thiết? – antyrat

Trả lời

0

Tùy thuộc vào những gì bạn có trong mã của mình, có khả năng nhiều quá trình xử lý diễn ra khi ai đó kéo ngón tay của họ (hoặc chuột) trên canvas. Ví dụ, trong các ứng dụng vẽ, vị trí XY của tiêu điểm của người dùng được chụp mỗi lần nó thay đổi pixel. Nếu mã bên trong mỗi sự kiện nhỏ bé này không phải là ánh sáng, khách hàng sẽ treo trong khi nó cố gắng bắt kịp.

+0

Không có mã bổ sung nào chạy khi kéo ngón tay. Mã tiếp tục chạy như bình thường, nó chỉ không vẽ lại canvas. – Joel

1

Tùy thuộc vào những gì bạn thực hiện trong mã của mình trên MotionEvent.ACTION_DOWN và MOVE ... bạn nên thường xuyên vẽ canvas. Thói quen đó không nên bị gián đoạn bởi bất kỳ thói quen nào khác.

Không chắc chắn nếu điều này khắc phục sự cố của bạn hoặc cung cấp bất kỳ thông tin chi tiết nào, nhưng ở đây sẽ xảy ra;

Ví dụ;

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); 
    } 
} 

Chuyển động sẽ được xử lý như sau (lưu ý nhận xét trong mã!);

@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); 
       } 

      } 
} 
+0

Tôi đang cố gắng viết Javascript để chạy trong trình duyệt Android. Trừ khi tôi thực sự thiếu một cái gì đó, bạn đã cho tôi java để chạy trong một ứng dụng Android. Vấn đề sẽ khá dễ giải quyết nếu tôi viết một ứng dụng. – Joel

+0

Ah .. Xin lỗi, không hiểu. Không thể giúp bạn ở đó. Bạn đã thử các trình duyệt khác nhau chưa? (FF, Opera, Dolphin) chỉ để kiểm tra và xác định nguyên nhân gốc rễ? –

+0

Tôi đã thử những gì tôi có thể trên lửa kindle của tôi, không có gì dường như làm việc đầy đủ, mặc dù một số đã tốt hơn so với những người khác. Tôi không nghĩ rằng nó có thể khắc phục được vấn đề, nhưng tôi nghĩ tôi sẽ từ bỏ một số tiền thưởng để tìm ra nếu có ai đó có một giải pháp ma thuật. Nó thực sự là một vấn đề lớn đối với các ứng dụng web. – Joel

2

Cách bạn thể hiện câu hỏi của mình không hiển thị khá nhiều thông tin.

ứng dụng web có một số hạn chế để có được tính năng đầy đủ của Android.

Quy tắc của bạn Tôi có ứng dụng javascript chạy trong canvas, trong giao diện đầu tiên có vẻ như bạn đang sử dụng canvas android trong ứng dụng của mình.

đây là link

mà có thể giúp bạn chạy canvas html5 trong android

Các vấn đề liên quan