Страницы

Поиск по вопросам

пятница, 7 февраля 2020 г.

Android - как правильно добавлять картинку на button

#java #android


Имеется png картинка и цель - добавить её на button. Проблема в том, что если добавляю
через @android:background кнопки, то картинка становится с лесенками (как будто антиалиазинг
выключен), либо становится мутной.
Если использую разметку ниже, то вообще картинка не показывается, остаются только
границы на button.



    
        
        
            
                
                

                
            
        
    


    
        
        
            
                
                

                
            
        
    





Имеются предоположения, что неправильно добавляю png в проект. Добавляю через
res->new->image asset

Исправил, теперь всё работает





    
        
            
        
        
            
                
                
                
            
        
        



    
        
            
        
        
            
                
                
                
            
        
    





Картинку перемещаю вручную в папку res/drawable-hdpi
Только есть небольшая проблема, что селектор android:state_pressed="true" всё равно
отказывается работать
    


Ответы

Ответ 1



По описанию проблема в том, что нет ресурса с достаточным качеством картинки. Либо ресурс с соответствующим квалификатором отсутствует вовсе (например res/drawable-xxhdpi/), либо хранящееся в нем изображение имеет низкое качество - собственный размер в пикселях мал для данного разрешения или достаточный размер, но неудачный скалинг, то есть размер нормальный, но в результате обработки по увеличению получилась хрень вместо четкой картинки. Так, для экрана плотностью XXHDPI (~480dp) изображение для стандартной иконки (размер 48x48dp) должно иметь абсолютные геометрические размеры 144x144 пикселя с содержимым соответствующего качества (подробнее смотрите офф.документацию). В первом случае недостающие ресурсы нужно создать, во втором посмотреть, что там за изображения вообще лежат и привести их в соответствие. PS: селектор у вас составлен неверно. В конце селектора должен быть айтем для вида по умолчанию, который не имеет никаких стейтов (в вашем случае вместо должен быть просто и располагаться самым последним в иерархии айтемов. Выбор айтема в селекторе производится по следующему алгоритму: проверяется условие стейта первого айтема, если совпадает, то он выводится и селектор заканчивает работу, иначе переходит ко второму айтем и проверяет его условие и так далее, если ни одно из условий не выполняется последним выполняется айтем без условий, который содержит, как правило, нормальный вид (состояние без всяких нажатий, фокусов, селекторов и тд). Картинку в селекторе не видно, потому что ее закрывает shape - фигуры не прозрачные по умолчанию. Смотрите, например этот ответ (вторая часть) по созданию вида из наложения картинки и шейпа.

Ответ 2



Подробная документация от Google расскажет о Button ссылка на документацию А так же можно почитать о файлах ресурсов ссылка на документацию по поводу ресурсов Так же, что бы избежать деформации картинки, советую изучить такую вещь как VectorDrawable, по ссылке выше есть описание.

Ответ 3



Знаю, что не всем подойдет совет, но почему бы не использовать ImageView, для которой, как и для кнопки, прикрепить OnClickListener?

Комментариев нет:

Отправить комментарий