Переопределить ширину до половины экрана - PullRequest
0 голосов
/ 21 октября 2019

Я разрабатываю чат и использую Recyclerview для показа сообщений. Когда сообщение является изображением, я использую Glide для его отображения. Используя glide, я использую функцию переопределения, чтобы показать изображение с определенными размерами. Однако это не очень хорошо работает, потому что не все телефоны имеют одинаковое разрешение и размер.

bitmap?.let {

           //meaning the image is landscape view
                    if (bitmap.width > bitmap.height)
                        Glide.with(Application.instance)
                            .load(fileInfo.localUri)
                            .apply(RequestOptions().override(500, 250))
                            .into(holder.sntImageView)
                    else
                        Glide.with(Application.instance)
                            .load(fileInfo.localUri)
                            .apply(RequestOptions().override(250, 500))
                            .into(holder.sntImageView)


                    holder.sendingProgress.visibility = View.GONE
                    holder.sntBubble.visibility = View.GONE
                    holder.sntImageView.visibility = View.VISIBLE

                } ?: run {
                    holder.sntImageView.visibility = View.GONE
                    holder.sendingProgress.visibility = View.GONE
                    holder.sntBody.text = "Unable to decode image"
                }

Поэтому мой вопрос заключается в том, как использовать Glide, чтобы изображение имело почти половину экрана вместо 500, 250 ...?

1 Ответ

0 голосов
/ 21 октября 2019

Вы можете начать, зная, с каким контейнером, например, ширина рециркулятора:

container.width

Это даст вам ширину в пикселях. После этого вы можете применить деление, чтобы получить пиксели пополам:

val yourViewWidth = container.width / 2

Вот так вы доберетесь до половины контейнера. И тогда вам просто нужно передать это значение Glide.

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

Обратите внимание, что если вы находитесь в представлении реселлера и хотите узнать размер дочернего представления, вам, возможно, придется подождать, пока макет будет готов, чтобы получить доступ к его параметрам. Это можно сделать с помощью ViewTreeObserver.OnGlobalLayoutListener, и выполнять свои операции внутри onGlobalLayout. Он будет запущен, когда представление будет готово, и вы сможете работать там.

Надеюсь, это поможет, удачного кодирования!

...