Android: создание фигурной кнопки - PullRequest
6 голосов
/ 15 октября 2011

Как я могу создать такую ​​кнопку?

enter image description here

Это должна быть просто область нажатия, а не настоящая кнопка.

Ответы [ 4 ]

23 голосов
/ 11 ноября 2011

Я использую дерьмо в кнопках неправильной формы в своем приложении, и чтобы изменить «горячую зону» или «активируемую область» кнопки, я просто использую метод Bitmap.getPixel(), чтобы проверить наличие альфа на используемом изображении.Если метод возвращает 0, то не выполняет событие щелчка.

Пример: (1) Создайте свою кнопку как обычно, в зависимости от того, что вам нужно. (2) Определите Bitmap и присвойте ему то же изображение, которое используется для кнопки. (3) Получите координаты X и Y касания или щелчка. (4) Передайте координаты методу .getPixel(x,y).

Пример кода:

// ** Declare your Bitmap somewhere **
final Bitmap TheBitmap;       
TheBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.TheImage);

// ** My onTouch code **
public boolean onTouch(View v, MotionEvent event) {

        int eventPadTouch = event.getAction();

        switch (eventPadTouch) {

            case MotionEvent.ACTION_DOWN:
                if (iX>=0 & iY>=0 & iX<TheBitmap.getWidth() & iY<TheBitmap.getHeight()) { // ** Makes sure that X and Y are not less than 0, and no more than the height and width of the image.                
                    if (TheBitmap.getPixel(iX,iY)!=0) {
                        // * A non-alpha area was clicked, do something 
                    }               
                }
                return true;                
        }           
        return false;
}

event.getX() и event.getY() просто дают вам координатыгде вы коснулись кнопки.

** Приведенный выше пример поможет вам в правильном направлении.Есть несколько проверок, которые нужно добавить в код, чтобы гарантировать отсутствие ошибок.

0 голосов
/ 15 октября 2011

прекратите использовать свой собственный холст или создайте изображение с помощью фотошопа, подобного этому, а затем с помощью Bitmap.createScaledBitmap масштабируйте его в соответствии с размером вашей кнопки, и, следовательно, вы получите эту кнопку.используя canvas вы должны написать больше кода, просто сделайте это, он будет работать нормально

0 голосов
/ 15 октября 2011

Просто создайте изображение, подобное этому, и вы можете использовать либо ImageView, либо Button без текста, и реализовать OnClickListener.Это просто работает!

0 голосов
/ 15 октября 2011

сохраните это как png и поместите в папку drawables.Тогда в вашем xml используйте что-то вроде этого

<Button
android:height="wrap_content"
android:width="wrap_content"
android:background="@drawable/your_png"
/>

Я не уверен на 100%, что вырезанный угол будет работать правильно.Эта пропавшая угловая область может оказаться кликабельной.Если это так, и если вы не хотите, чтобы это было, то вам придется где-то нарезать картинку пополам, создать две кнопки, которые вы можете установить рядом друг с другом, чтобы создать эту форму, и использовать один и тот же приемник щелчков дляи то и другое.С точки зрения пользователей это все равно будет выглядеть как одна кнопка.

...