В RecyclerView криво масштабируются изображения

123
04 июня 2021, 19:00

В RecyclerView ,макет которого состоит из текста + изображения некоторые ImageView криво располагаются. Как я понял, это связано с RecyclerView, т.к. при использовании ListView подобных проблем не возникало. Вот код активности:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.widget.ArrayAdapter;
import java.util.ArrayList;
import java.util.List;
public class vrasd2 extends AppCompatActivity {
    ArrayList<Phone> phones = new ArrayList<>();
    String stre[] = {"Средняя общеобразовательная школа № 60 распахнула свои двери в 1976 году. Строительство новой школы началось в 1974 году. Заказчиком столь важного объекта социальной инфраструктуры выступил Уфимский моторостроительный завод, директором которого в этот период был Герой Социалистического Труда Михаил Алексеевич Ферин (1907 – 1979). Лето 1976 года выдалось у строителей особенно «жарким»: возводить школу помогали ее будущие учителя и ученики.\n" +
            "5 сентября 1976 г. состоялся торжественный митинг с участием строителей данного объекта. Первый директор Вениамин Иванович Корзников получил символический ключ от школы, а учащиеся дали клятву беречь, хранить и содержать школу в отличном состоянии.","По меркам того времени, школа представляла собой полностью отвечающий всем требованиям инновационный образовательный центр. Новая школа с радостью была встречена жителями микрорайона, ведь их детям приходилось учиться в школе № 51 в три смены.\n" + "Первый директор Вениамин Иванович Корзников (ученики знали его как Виктора Ивановича) родился в крестьянской семье, до войны работал станочником на заводе. В годы Великой Отечественной войны он служил на кораблях Амурской Краснознаменной флотилии на Дальнем Востоке, участвовал в боях с японцами в Маньчжурии.\n" +
            "Работать в школу пришел в 1953 году после окончания педагогического института учителем математики и физики. Вениамин Иванович проработал директором школы с 1976 по 1985 гг. Тысячи учеников и десятки учителей с благодарностью вспоминают требовательного, справедливого, умного и доброго директора. Про первого директора говорили, что у него «На первом месте школа, на втором – школа, на третьем – школа». За отлично построенную систему работы он неоднократно награждался почетными грамотами, ему присвоены звания «Заслуженный учитель Республики Башкортостан» и «Отличник просвещения Российской Федерации».","Первыми заместителями директора по учебно-воспитательной работе стали Тамара Петровна Пайкина и Тамара Дмитриевна Старцева, которые вложили много сил и знаний в создание крепкого и творческого коллектива.\n" +
            "Лицей, ОАО «Уфимское моторостроительное производственное объединение» и Уфимский государственный авиационный технический университет объединяют давние, особые и очень теплые взаимоотношения. С 1986 года в стенах нашего лицея созданы группы с углубленным изучением авиаконструирования, затем ставшие знаменитыми Авиационными классами. Интересно отметить, что учащиеся лицея уже в 1980-е годы сдавали вступительные экзамены в Уфимский государственный авиационный технический университет в стенах родной школы и выпускной бал встречали студентами. Наряду с обычными школьными дисциплинами под руководством преподавателей ВУЗа наши учащиеся изучали предметы «Основы автоматики», «Двигатели летательных аппаратов», «История авиации», «Основы авиаконструирования».","В 1993 году между школой и Уфимским государственным нефтяным техническим университетом был заключен договор об открытии класса с изучением специальностей, связанных с нефтедобывающей и нефтеперерабатывающей промышленностью.\n" +
            "За достигнутые серьезные успехи в обучении и воспитании подрастающего поколения школе в 1997 году присвоен статус школы-лицея, а в 1999 году статус лицея.","За долгие годы плодотворной работы в лицее создался крепкий работоспособный коллектив. В лицее обучается более 1200 учащихся, работает более 80 педагогов, 20 человек технического персонала. Лицей всегда славился своей фундаментальной подготовкой, что проявляется в самых разнообразных сферах. Мы – всегда победители и призеры в районных, городских и республиканских олимпиадах, конкурсах. Славу лицея куют его обучающиеся. Как только рухнул «железный занавес», лицей выходит на международную образовательную арену. В 1990 – 2000-е годы лицеисты побеждали в международных олимпиадах в Италии, Греции, Болгарии, Турции, Польше и других странах.\n" +
            "Лицей гордится, что среди его выпускников ученые, инженеры, врачи, учителя, юристы, военные, журналисты, работники телевидения и т.д. Более 95% выпускников лицея поступают в ведущие ВУЗы Республики Башкортостан и Российской Федерации."};
    int imag[] = {R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vrasd2);
        setInitialData();
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv);
        DataAdapter adapter = new DataAdapter(this, phones);
        recyclerView.setAdapter(adapter);
    }
    private void setInitialData(){
        for (int i = 0; i < imag.length; i++) {
            phones.add(new Phone (stre[i],imag[i]));
        }
    }
}

Разметка:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/txt123"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#000"
        android:textSize="17sp"
        android:textStyle="normal" />
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/iv123"
        android:scaleType="fitCenter"
        android:adjustViewBounds="true"/>
</LinearLayout>

Класс для представления данных:

public class Phone {
    private String text;
    private int img;
    public Phone(String text, int img) {
        this.text = text;
        this.img = img;
    }
    public String getText() {
        return this.text;
    }
    public void setText(String text) {
        this.text = text;
    }
    public int getImg() {
        return this.img;
    }
    public void setImg(int img) {
        this.img = img;
    }
}

И сам адаптер:

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    private LayoutInflater inflater;
    private List<Phone> phones;
    DataAdapter(Context context, List<Phone> phones) {
        this.phones = phones;
        this.inflater = LayoutInflater.from(context);
    }
    @Override
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.raz4, parent, false);
        return new ViewHolder(view);
    }
    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
        Phone phone = phones.get(position);
        holder.nameView.setText(phone.getText());
        holder.imageView.setImageResource(phone.getImg());
    }
    @Override
    public int getItemCount() {
        return phones.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        final ImageView imageView;
        final TextView nameView;
        ViewHolder(View view){
            super(view);
            nameView = (TextView) view.findViewById(R.id.txt123);
            imageView = (ImageView)view.findViewById(R.id.iv123);
        }
    }
}

как выглядят изображения при использовании RecyclerView:

как я хотел бы, чтобы они выглядят (это при использовании ListView, но я не могу использовать его, т.к. он лагает при прокрутке (ViewHolder пробовал)):

заранее спасибо.

Answer 1

Вам надо установить высоту для самой ячейки, и для её TextView и ImageView в wrap_content. Так поместится весь текст и картинка. При этом последняя, не имея заранее заданной высоты будет подстраивать оную под ширину, которая задана во весь экран.

READ ALSO
Получить список ребер между двумя вершинами графа

Получить список ребер между двумя вершинами графа

Нужно реализовать метод getPath так чтобы он возвращал список ребер, путь не обязательно должен быть оптимальным, но должно учитываться isDirected...

109
Есть желание написать клиент серверное приложение чат для Android

Есть желание написать клиент серверное приложение чат для Android

Само приложение хотелось бы создавать на Android studioПрошу подсказать с технологиями, которые стоит использовать в создании (напр

214