Как загрузить cardview GridView с анимацией в Android?

Я создал приложение для Android, например галерею, в которой есть изображения с использованием фрагмента gridview.

Функциональность моего приложения работает нормально, и изображение отображается во фрагменте gridview, а также мое второе действие открывается, когда я нажимаю на элемент, но я хочу показать cardview GridView с анимацией.

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

Вот код фрагмента моего приложения:

public class CallFragment extends Fragment {

    GridView grid;
        String[] plan = {
                "Student Bundle",
                "SMS Plus Bundle",
                "Instagram",
                "Facebook",
                "Flickr"

        } ;
        String[] web = {
                "*3000",
                "*106*1",
                "Instagram",
                "Facebook",
                "Flickr"

        } ;
        int[] imageId = {
                R.drawable.calla,
                R.drawable.smsb,
                R.drawable.person7,
                R.drawable.person7,
                R.drawable.person7

        };
        int[] fullimg = {
                R.drawable.callaa,
                R.drawable.smsbb,
                R.drawable.person7,
                R.drawable.person7,
                R.drawable.person7

        };

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            setHasOptionsMenu(true);

            View view = inflater.inflate(R.layout.fragment_call,container,false);

            CustomGrid adapter = new CustomGrid(getActivity(), plan, web, imageId, fullimg);

            grid=(GridView) view.findViewById(R.id.grid);
            grid.setAdapter(adapter);
            grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                    String value=(String)grid.getItemAtPosition(i);
                    Intent intent=new Intent(getActivity(),Book.class);
                    intent.putExtra("web", web[i]);
                    intent.putExtra("plan", plan[i]);
                    intent.putExtra("imageId", imageId[i]);
                    intent.putExtra("fullimg", fullimg[i]);
                    startActivity(intent);

                }
            });

            return view;
        }

Вот код моего приложения CustomAdapter:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

    ArrayList<String> personNames;
    ArrayList<String> personCode;
    ArrayList<Integer> personImages;
    ArrayList<Integer> personImages1;
    Context context;

    public CustomAdapter(Context context, ArrayList<String> personNames, ArrayList<String> personCode, ArrayList<Integer> personImages, ArrayList<Integer> personImages1) {
        this.context = context;
        this.personCode = personCode;
        this.personNames = personNames;
        this.personImages = personImages;
        this.personImages1 = personImages1;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // infalte the item Layout
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false);
        // set the view's size, margins, paddings and layout parameters
        MyViewHolder vh = new MyViewHolder(v); // pass the view to View Holder
        return vh;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        // set the data in items
        //holder.name.setText(personNames.get(position));
        holder.image.setImageResource(personImages.get(position));
        //holder.image.setImageResource(personImages1.get(position));
        // implement setOnClickListener event on item view.
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // open another activity on item click
                Intent intent = new Intent(context, SecondActivity.class);
                //intent.putExtra("image", personImages.get(position)); // put image data in Intent
                intent.putExtra("name", personNames.get(position)); // put image data in Intent
                intent.putExtra("code", personCode.get(position)); // put image data in Intent
                intent.putExtra("image", personImages1.get(position)); // put image data in Intent
                context.startActivity(intent); // start Intent
            }
        });

    }


    @Override
    public int getItemCount() {
        return personNames.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        // init the item view's
        TextView name;
        TextView code;
        ImageView image;

        public MyViewHolder(View itemView) {
            super(itemView);

            // get the reference of item view's
            name = (TextView) itemView.findViewById(R.id.name);
            code = (TextView) itemView.findViewById(R.id.code);
            image = (ImageView) itemView.findViewById(R.id.image);

        }
    }
}

Вот пример моего требования:

Как загрузить cardview GridView с анимацией в Android?

Моя сетка выглядит так:

Как загрузить cardview GridView с анимацией в Android?

0
0
602
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Создайте отдельный XML-файл в разделе anim и примените его в onBindViewHolder.

 @Override
    public void onBindViewHolder(ViewHolder holder, int position)
    {


        // Here you apply the animation when the view is bound
        setAnimation(holder.itemView, position);
    }

    /**
     * Here is the key method to apply the animation
     */
    private void setAnimation(View viewToAnimate, int position)
    {.             int lastPosition=0;

        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition)
        {
            Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }
}

могу ли я использовать такой вид: <? xml version = "1.0" encoding = "utf-8"?> <set xmlns: android = "schemas.android.com/apk/res/android"> <translate android: duration = "5000" android: fromYDelta = "0% p "android: interpolator = " @ android: anim / cycle_interpolator "android: toYDelta = " 100% p "/> </set>

Riyan 08.08.2018 13:52

Можете ли вы сказать мне имя xml, которое вы используете в своем коде

Riyan 08.08.2018 13:54

slide_in_left имя для xml

sagar shetty 08.08.2018 13:56

Если это было полезно, отметьте это как ответ. Я буду полезен другим

sagar shetty 08.08.2018 14:00

Создано отдельное имя XML: animation_style, и ваш код добавлен в мой CustomAdapter, после чего отображается ошибка. Невозможно разрешить символ lastposition.

Riyan 08.08.2018 14:02

Извините за ошибку, сделайте это int lastPosition = 0;

sagar shetty 08.08.2018 14:03

вы имеете ввиду изменить имя XML файла?

Riyan 08.08.2018 14:04

пожалуйста, проверьте еще раз и скажите мне, где я добавляю ваш код в свой CustomAdapter, потому что он все еще показывает ту же ошибку Cannot resolve symbol 'lastposition'

Riyan 08.08.2018 14:09

я создал XML-файл с именем slide_in_left, используя этот код: <? xml version = "1.0" encoding = "utf-8"?> <set xmlns: android = "schemas.android.com/apk/res/android"> <translate android: duration = "5000" android: fromYDelta = "0% p" android: interpolator = "@ android: anim / cycle_interpolator" android: toYDelta = "100% p" /> </set>

Riyan 08.08.2018 14:10

открытый класс CustomAdapter расширяет RecyclerView.Adapter <CustomAdapter.ViewHolder> {частный контекст контекста; // Позволяет запомнить последний элемент, показанный на экране private int lastPosition = -1 ;. Определите lastPosition в начале.

sagar shetty 08.08.2018 14:12

Спасибо, что работает слева направо, так что вы можете сказать мне, как можно изменить снизу вверх

Riyan 08.08.2018 14:28

Google сверху вниз измените код XML. Отметьте это как свой ответ слева от ответа.

sagar shetty 08.08.2018 14:31

Спасибо за вашу помощь, я установил как хочу

Riyan 08.08.2018 15:12

Вы можете применять анимацию в RecyclerView с помощью этоtutorial.

а для изображения по умолчанию просто поместите свойство src внутри вашего изображения в XML-файле R.layout.rowlayout

Использовал этот Recyclerview с анимацией загрузки

Анимация загрузки Recyclerview

Другие вопросы по теме