Как правильно установить LayoutParams?

226
16 августа 2017, 16:56

Я использую в своем проекте эту библиотеку

https://github.com/aaronbond/Swipe-Deck

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

То есть первая которая на виду самая большая та что за ней чуть меньше и так далее.

Как и показано в описании библиотеки я использую адаптер

public class SwipeDeckAdapter extends BaseAdapter {
    private List<String> data;
    private Context context;
    public SwipeDeckAdapter(List<String> data, Context context) {
        this.data = data;
        this.context = context;
    }
    @Override
    public int getCount() {
        return data.size();
    }
    @Override
    public Object getItem(int position) {
        return data.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if(v == null){
            LayoutInflater inflater = getLayoutInflater();
            // normally use a viewholder
            v = inflater.inflate(R.layout.test_card, parent, false);
        }
        ((TextView) v.findViewById(R.id.textView2)).setText(data.get(position));
        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String item = (String)getItem(position);
                Log.i("MainActivity", item);
            }
        });
        return v;
    }
}

Насколько я понимаю изменения нужно делать именно в нем в методе getView()

Просто для теста я делаю это так

@Override
public View getView(final int position, View convertView, ViewGroup iParent)
{
    View v = convertView;
    if (v == null)
    {
        v = LayoutInflater.from(iParent.getContext()).inflate(R.layout.my_flight_card_deck_item, iParent, false);
        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) v.getLayoutParams();
        params.height = 150;
        params.width = 150;
        v.setLayoutParams(params);
    }
    TextView textView = (TextView) v.findViewById(R.id.tv_test_deck);
    String item = (String) getItem(position);
    textView.setText(item);
    return v;
}

Я явно указываю, что хочу получить view размером 150 на 150 , но в результате не получаю ничего... Такое впечатление , что как только я хочу применить свои параметры отрисовка вью просто игнорируется

Что делаю не так?

Если есть вопросы спрашивайте

Посоветуйте куда смотреть

Answer 1

Если у кого то будет такая же проблема с этой либой, то я решил это так

там есть класс SwipeDeck в нем есть метод animateCardPosition я его переделал таким образом

protected void animateCardPosition(View card, int position)
{
    float offset = (int) (position * CARD_SPACING);
    ViewPropertyAnimator currentView = card.animate().setDuration(ANIMATION_DURATION).y(getPaddingTop() - offset);
    //If it is 3 cards in stack so it is last one
    if (position < NUMBER_OF_SIMULTANEOUS_CARDS - 2)
    {
        currentView.alpha(1.0f).scaleX(1);
    }
    //If it is 3 cards in stack so it is middle one
    else if (position < NUMBER_OF_SIMULTANEOUS_CARDS - 1)
    {
        currentView.alpha(1.0f).scaleX(0.95f);
    }
    //If it is 3 cards in stack so it is first one
    else
    {
        currentView.alpha(0.4f).scaleX(0.90f);
    }
}

В итоге получилось то, что нужно

READ ALSO
Сборка APK файла из исходников

Сборка APK файла из исходников

Можно ли из исходников Android Studio проекта, собрать APK файл( вне студии ) через терминал(Linux)?

330
Spring: как загрузить таблицу из DB в память?

Spring: как загрузить таблицу из DB в память?

Здравствуйте, у меня есть небольшая таблица, которую я хочу загрузить в память в виде List<Country>, чтобы не дергать БДНо

316
Как выровнять блоки по верхней границе?

Как выровнять блоки по верхней границе?

Блоки с фиксированной высотой с inline-blockКак прижать их к верхней границе контейнера без абсолютного позиционирования?

213
Как выровнять текст по картинке

Как выровнять текст по картинке

Здравствуйте, есть код

360