Как получить доступ к ширине и высоте представления в BindingAdapter? - PullRequest
1 голос
/ 27 февраля 2020

Я использую Android привязку данных и BindingAdapter для привязки растрового изображения ImageView к загружаемому растровому изображению.

@BindingAdapter("imageName")
public void bind(ImageView imageView, String imageName) {
   ...
   int width = imageView.getWidth();
   int height = imageView.getHeight();
   ...
}

И width, и height равны нулю и из своих исследований и многочисленных сообщений SO я понимаю, что, вероятно, я вызываю эти методы слишком рано, а компоновка еще не прорисована.

Но я не могу действительно переместить код в другой метод, когда хочу использовать BindingAdapter. Есть ли другой способ получить измерения для вида или отложить процесс привязки?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

используйте это

view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() {
            view.removeOnGlobalLayoutListener(this);
            int width = imageView.getWidth();
            int height = imageView.getHeight();
        }
});

это лучше, чем добавление задержки, она запускается, когда вы просматриваете нарисованный и удаляете слушателя после, так что нет задержки памяти.

0 голосов
/ 03 апреля 2020

Попробуйте использовать эту вещь:

@BindingAdapter("imageName")
public void bind(ImageView imageView, String imageName) {
    imageView.post(() -> {
        int width = imageView.getWidth();
        int height = imageView.getHeight();
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...