2011-11-22 19 views

Trả lời

2

Bạn tạo một TouchDelegate:  

final View parent = (View) findViewById(R.id.touch_delegate_root); 
parent.post(new Runnable() { 
    // Post in the parent's message queue to make sure the parent 
    // lays out its children before we call getHitRect() 
    public void run() { 
     final Rect rect = new Rect(); 
     Button delegate = YourActivityClass.this.mButton; 
     delegate.getHitRect(rect); 
     rect.top -= 20; 
     rect.bottom += 12; // etc 
     parent.setTouchDelegate(new TouchDelegate(rect , delegate)); 
    } 
}); 

refered từ here

+6

Với phương pháp của bạn, tôi có thể tăng diện tích có thể chạm, nhưng tôi không thể giảm diện tích. – Amit

1

Bạn có thể giải quyết nó chỉ sử dụng xml. Chỉ cần đặt hình ảnh của bạn vào một khung và đặt một chế độ xem trong suốt khác mà bạn bấm để nhấp vào các sự kiện ở trên cùng. Điều chỉnh kích thước và vị trí với thông số bố cục:

<FrameLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<ImageView android:id="your_view" 
    android:clickable="false" 
    <!-- your other attributes --> 
    <!-- ... --> 
    /> 
    <ImageView android:id="the_clickable_view" 
     android:src="@null" 
    <!-- set desired size of clickable area --> 
    <!-- align it inside a frame using: 
    android:gravity and android:margins --> 
    /> 
</FrameLayout> 
+0

Vì vùng mong muốn không thể nhấp chuột là vùng "trong suốt" (tôi cho rằng nó không nằm trong vùng có thể vẽ), bạn thậm chí có thể bỏ chế độ xem đã thêm và chỉ bằng cách thêm FrameLayout mà bạn đã giải quyết nó - sử dụng các thuộc tính layout gốc trên FrameLayout thay vì ImageView và làm cho ImageView chỉ lớn như bạn muốn nó có thể nhấp. –

0

Không sử dụng OnClickListener, nhưng tự mình xử lý khu vực nhấp chuột.

Ví dụ bằng cách chia tỷ lệ hình chữ nhật cảm ứng và dịch nó vào giữa chế độ xem. Bạn cũng có thể sử dụng bán kính hoặc bù thủ công.

imageView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     final Rect rect = new Rect(); 
     v.getHitRect(rect); 

     float scale = 0.5f; 

     final float x = event.getX(); 
     final float y = event.getY(); 

     final float minX = v.getWidth() * 0.5f * (1.0f - scale); 
     final float maxX = v.getWidth() * 0.5f * (1.0f + scale); 

     final float minY = v.getHeight() * 0.5f * (1.0f - scale); 
     final float maxY = v.getHeight() * 0.5f * (1.0f + scale); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       if (x > minX && x < maxX && y > minY && y < maxY) { 
        Log.d("TOUCH", String.valueOf(x) + " " + String.valueOf(y)); 
      } 
      break; 

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