Я создал приложение для 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);
}
}
}
Вот пример моего требования:
Моя сетка выглядит так:
Создайте отдельный 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, которое вы используете в своем коде
slide_in_left имя для xml
Если это было полезно, отметьте это как ответ. Я буду полезен другим
Создано отдельное имя XML: animation_style, и ваш код добавлен в мой CustomAdapter, после чего отображается ошибка. Невозможно разрешить символ lastposition.
Извините за ошибку, сделайте это int lastPosition = 0;
вы имеете ввиду изменить имя XML файла?
пожалуйста, проверьте еще раз и скажите мне, где я добавляю ваш код в свой CustomAdapter, потому что он все еще показывает ту же ошибку Cannot resolve symbol 'lastposition'
я создал 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>
открытый класс CustomAdapter расширяет RecyclerView.Adapter <CustomAdapter.ViewHolder> {частный контекст контекста; // Позволяет запомнить последний элемент, показанный на экране private int lastPosition = -1 ;. Определите lastPosition в начале.
Спасибо, что работает слева направо, так что вы можете сказать мне, как можно изменить снизу вверх
Google сверху вниз измените код XML. Отметьте это как свой ответ слева от ответа.
Спасибо за вашу помощь, я установил как хочу
Вы можете применять анимацию в RecyclerView с помощью этоtutorial.
а для изображения по умолчанию просто поместите свойство src внутри вашего изображения в XML-файле R.layout.rowlayout
Использовал этот Recyclerview с анимацией загрузки
могу ли я использовать такой вид: <? 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>