Существует горизонтальная прокрутка, содержащая линейный макет, у динамически созданного Imageview внутри линейного макета возникают проблемы - PullRequest
0 голосов
/ 03 октября 2019

В строке таблицы есть горизонтальная прокрутка, содержащая линейный макет,
Намерение состоит в том, чтобы динамически разместить 5 изображений в линейном макете.

Проблема в том, что изображения в видоизменении смещены иЛинейный макет не заполняет представление горизонтальной прокруткикод выглядит следующим образом:

int mMaxCount = 5;
ImageView[]mImageView = new ImageView[mMaxCount];

LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params1.setMargins(10, 75, 0, 0);
params1.setMargins(100, 0, 0, 0);
params1.height = 200;
params1.width  = 200;

LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params2.setMargins(100, 85+20, 0, 0);
params2.setMargins(100, 0, 0, 0);
params2.height = 170;
params2.width  = 170;

LinearLayout.LayoutParams params3 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params3.setMargins(100, 95+20, 0, 0);
params3.setMargins(100, 0, 0, 0);
params3.height = 140;
params3.width  = 140;

LinearLayout.LayoutParams params4 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params4.setMargins(100, 105+20, 0, 0);
params4.setMargins(100, 0, 0, 0);
params4.height = 110;
params4.width  = 110;

LinearLayout.LayoutParams params5 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params5.setMargins(100, 115+20, 0, 0);
params5.setMargins(100, 0, 0, 0);
params5.height = 80;
params5.width  = 80;
params5.gravity = Gravity.CENTER;

mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().setGravity(Gravity.CENTER);

for (int i = 0; i < mMaxCount; i++)
{
    mImageView[i] = new ImageView(mContext);
    //mImageView[i].setBackgroundColor(Color.TRANSPARENT);
    mImageView[i].setTag("T"+"I"+i);
    mImageView[i].setId(i);
    mImageView[i].setFocusable(true);
    mImageView[i].setClickable(true);

    if (i == 0)
    {

        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(200, 200).into(mImageView[i]);
        mImageView[i].setBackgroundResource(R.drawable.size1);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params1);
    }
    else if (i == 1)
    {
        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(170, 170).into(mImageView[i]);
        mImageView[i].setBackgroundResource(R.drawable.size1);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params2);
    }
    else if (i == 2)
    {
        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(140, 140).into(mImageView[i]);
        mImageView[i].setBackgroundResource(R.drawable.size1);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params3);
    }
    else if (i == 3)
    {
        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(110, 110).into(mImageView[i]);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params4);
    }
    else if (i == 4)
    {
        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(80, 80).into(mImageView[i]);
        mImageView[i].setBackgroundResource(R.drawable.size1);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params5);
    }
}

Цвет фона для горизонтальной прокрутки: белый
Цвет фона линейного макета - красный
Я ожидаю, что красный цвет сохранится до конца белого цвета. и покрывает его
Еще один момент, когда при горизонтальной прокрутке я просто вижу 4 просмотра изображений вместо 5

enter image description here

Ответы [ 3 ]

1 голос
/ 03 октября 2019

Прежде всего:

  1. Лучше использовать RecylerView для добавления элементов в список. этот пример может вам помочь.
  2. RecylerView обратно совместим , поэтому он работает на более старой версии, для api 22 вам не нужно устанавливать minSDK на 22.
  3. Ваше решение для добавления элемента в Linearlayout должно быть лучше. Вы можете сделать массив своих параметров, чтобы избежать, если / иначе внутри цикла.

Ответ:

Вы видите 4 ImageView, потому что вы забыли добавить

mImageView[i].setBackgroundResource(R.drawable.size1);

внутри вашего else if (i == 3) Таким образом, он добавляет просмотр изображения с пустым фоном, который не виден.

И

для покрытия всего белого цвета вашегогоризонтальная прокрутка по КРАСНОМУ вы должны установить android:fillViewport="true" на HorizentalScrollView, как показано ниже:

 <HorizontalScrollView
            android:id="@+id/table_3_Row_7_HSV1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fillViewport="true"
            android:layout_span="3"
            android:background="#FFFFFF"
            android:fadeScrollbars="false"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:scrollbarSize="0.5mm"
            android:scrollbarThumbHorizontal="@color/gray"
            android:scrollbars="horizontal">
0 голосов
/ 05 октября 2019

Я решил проблему с помощью
1 - Удаление android:layout_gravity="center" из LinearLayout
2 - Использование setPadding для горизонтальной прокрутки, чтобы переместить его вниз к центру строки таблицы

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

Для приведенного ниже пункта вам необходимо изменить код, как показано ниже.

"Другой момент - при горизонтальной прокрутке, я просто вижу 4 просмотра изображений вместо 5"

для (int i= 0; i

до

для (int i = 0; i <= mMaxCount; i ++) </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...