2014-12-23 2 views
1

У меня есть GridView, который заполняется с кнопками, выглядит следующим образом:Как уменьшить область щелчка кнопки?

прямо сейчас, если я нажимаю в любом месте на кнопку, она будет нажата. Но я хочу, чтобы кнопка была нажата только тогда, когда ее щелкнули в светло-серой области, а не в темно-серой или белой области на верхней и левой сторонах. Я пробовал использовать setPadding(int,int,int,int) и setPaddingRelative(int,int,int,int), но ни один из них не имеет никакого эффекта. Как это исправить?

Edit: кнопка 50x50 и уже простиралась от кнопки класса

+0

Вы ** можете ** положить кнопку внутри макета. Макет будет делать «границы», а кнопка будет только серой областью (так что это будет единственная ** реактивная область **). ЛЕГКО. СДЕЛАННЫЙ. –

ответ

1

Override onTouchEvent в пользовательской кнопки:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (isInGrayArea(event.getX(), event.getY())) { 
     return super.onTouchEvent(event); 
    } 
    return false; 
} 

event.getX() и event.getY() является пикселей координаты, вам необходимо преобразовать их в дп, я полагаю.

1

сделать вид НАЗН.КНОПКИ наследовать от класса Button и переопределить метод OnDraw с помощью специального кода, чтобы сделать это.

Вы можете переопределить методы касания, чтобы определить, когда нажата кнопка, и получить координаты x и y для удаления случаев, когда кнопка не должна быть нажата.

+0

Какой пользовательский код в onDraw не будет нажимать кнопку на определенные координаты? – user2361174

Смежные вопросы