2012-06-08 23 views
5

Tôi đang thêm các lần xem ảo vào bố cục gốc động. Và tôi đang thực hiện phóng to/thu nhỏ hoạt động trênTouch của hình ảnh được thêm vào. Tôi muốn xóa chế độ xem bổ sung trênLongPress của nó.onTouch, onLongNhấp vào nhau trong android

img.setOnLongClickListener(longClickAction); 
img.setOnTouchListener(touchAction); 

onLongPress:

OnLongClickListener longClickAction = new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 

     parentLayout.removeView((ImageView)v); 
     return false; 
    } 
}; 

onTouch:

OnTouchListener touchAction = new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     ImageView i = (ImageView)v; 

     //perfrom zoom operation on touch of imageview 
     zoom(i, event); 
     return true; 

    } 
}; 

Chỉ Chạm sự kiện đang làm việc. Tại sao? Làm thế nào tôi có thể có cả hai? Trường hợp iam đi sai? Tôi nên làm gì để xóa chế độ xem được thêm? Làm ơn giúp tôi. Cảm ơn trước.

+0

có bạn giải quyết nó? – Siddhesh

+0

@Siddhesh tuân theo [câu trả lời dưới đây] của tôi (http://stackoverflow.com/a/41952363/4629101), sự cố sẽ được giải quyết. –

Trả lời

13

onTouch luôn kêu gọi xem bạn vì đây là tình trạng ban đầu của cử các sự kiện để xem. Khi bạn nhấn lâu, chế độ xem này vẫn gọi số onTouch trước và kể từ khi bạn trả lại true trong onTouch (có nghĩa là bạn đã tiêu thụ sự kiện này và sự kiện sẽ không được gửi đi nữa), bạn sẽ không nhận được onLongPress được gọi. Bí quyết sẽ trở lại như thế nào false trong onTouch

+4

Nhưng sau đó 'onTouch' và' onLongPress' sẽ được gọi. Còn nếu 'onLongPress' có nghĩa là không gọi 'onTouch' thì sao? –

+0

@ LuisA.Florit: bạn có tìm giải pháp nào cho điều này không? cùng một vấn đề với tôi, cả onTouch và onLongPress được gọi cùng một lúc .. – Tejas

+0

điểm cần lưu ý @luis A. Florit –

-2

Hãy thử điều này, nó hoạt động tốt cho tôi.

boolean isMoving= false; 

yourView.setOnTouchListener(new View.OnTouchListener(){ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_MOVE) { 
      isMoving = true; 
      Log.i("isMoving:", "true"); 
     } 
     if(event.getAction()==MotionEvent.ACTION_UP){ 
      isMoving=false; 
      Log.i("isMoving:","false"); 
     } 
     return false; 
    } 
}); 
yourView.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     if(!isMoving){ 
      //do onlongclick event here 
     } 
     return true; 
    } 
});; 
1

Như đã thảo luận bởi @asenovmCác onTouch() luôn được gọi là vì nó là tình trạng ban đầu của cử các sự kiện để xem, nhưng nếu chúng ta quay trở lại giá trị sai trong onTouch() Sau đó, cả hai sẽ hoạt động như một sự quyến rũ và vấn đề sẽ được giải quyết.

Edit: Đề nghị của tôi cho người sử dụng là thay vì thực hiện OnLongClickListener() và OnTouch() với nhau, hãy thử sử dụng các chức năng của OnLongClickListener() trong Double click sự kiện.

Bạn có thể thực hiện Double Click theo những cách sau đây:

int i = 0; 
btn.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    i++; 
    Handler handler = new Handler(); 
    Runnable r = new Runnable() { 

     @Override 
     public void run() { 
      i = 0; 
     } 
    }; 

    if (i == 1) { 
     //Single click 
     handler.postDelayed(r, 250); 
    } else if (i == 2) { 
     //Double click 
     i = 0; 
     ShowDailog(); 
    } 


    } 
}); 
Các vấn đề liên quan