Ich habe eine Recycler-Ansicht, die Liste der Produkte zeigt, und es gibt ein Einkaufswagen-Symbol in jeder Recycler-Ansicht Zeile Element. Beim Klicken auf das Einkaufswagensymbol möchte ich, dass das Produktbild die Skalierung dupliziert und in die obere rechte Ecke in Einkaufswagensymbol in der Aktionsleiste verschoben wird.Android In den Einkaufswagen hinzufügen Animation von Recyclerview
Mein Ansatz:
eine Image in Reihe Artikel xml von recyclerview Erstellt und machte es zunächst unsichtbar. beim Klicken auf das Einkaufswagen-Symbol von recyclerview machte diese Bildansicht sichtbar und bevölkerte Bildansicht mit Bild-URL und hinzugefügt übersetzen Animation von Start- und Endposition.
Aktuell Ergebnis:
das Bild bewegen innerhalb der jeweiligen Zeile einzelnes Element und verschwindet, sobald sie die Grenze der Reihe Artikel Hits .. ich das Bild bedeutet nicht nicht oben Aktionsleiste Menü erreichen aus Reihe Postens stehen Artikel.
Lösung versucht:
public static void setAllParentsClip(View v, boolean enabled) {
while (v.getParent() != null && v.getParent() instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) v.getParent();
viewGroup.setClipChildren(enabled);
viewGroup.setClipToPadding(enabled);
v = viewGroup;
}
}
auch manuell alle Eltern in xml:
android:clipChildren="false"
android:clipToPadding="false"
Immer noch das Bild verschwindet, nachdem es Grenze Reihe Punkt berührt .. Irgendwelche Vorschläge a sein große Hilfe
Code für mein RecyclerView Adapter:
public class TrendingItemsAdapter extends RecyclerView.Adapter<TrendingItemsAdapter.MyViewHolder> {
private List<ProductEventDetail> productEventDetailList;
private Context context;
public TrendingItemsAdapter (List<ProductEventDetail> productEventDetailList){
this.productEventDetailList=productEventDetailList;
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView productName;
private TextView progressDisplay;
private ImageView imageView, addToCart,animImg;
private ProgressBar progressBar;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public MyViewHolder(View view) {
super(view);
productName=(TextView)view.findViewById(R.id.trending_Product_Name);
imageView=(ImageView)view.findViewById(R.id.trending_product_img);
addToCart=(ImageView)view.findViewById(R.id.add_to_cart);
animImg=(ImageView)view.findViewById(R.id.animProductImg);
progressDisplay=(TextView)view.findViewById(R.id.event_progress_value);
progressBar=(ProgressBar)view.findViewById(R.id.event_progress);
progressBar.setProgressDrawable(context.getDrawable(R.drawable.progress_tint));
addToCart.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId()==addToCart.getId()){
Toast.makeText(context,productEventDetailList.get(getAdapterPosition()).getProductName(),Toast.LENGTH_SHORT).show();
setAllParentsClip(animImg,false);
// Animation code
Animations anim = new Animations();
int fromLoc[] = new int[2];
imageView.getLocationOnScreen(fromLoc);
animImg.setVisibility(View.VISIBLE);
Glide.with(context)
.load(productEventDetailList.get(getAdapterPosition()).getProductImageUrl())
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.fitCenter()
.into(animImg);
float startX = fromLoc[0];
float startY = fromLoc[1];
Animation a = anim.fromAtoB(startX,startY, 1028, 143, animL,2000);
animImg.setAnimation(a);
a.startNow();
}
}
Animation.AnimationListener animL = new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
//this is just a method call you can create to delete the animated view or hide it until you need it again.
animImg.setVisibility(View.GONE);
}
};
}
@Override
public TrendingItemsAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
context=parent.getContext();
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.trending_item_row_detail, parent, false);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callProductEventDetails();
}
});
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(TrendingItemsAdapter.MyViewHolder holder, int position) {
ProductEventDetail productEventDetail= productEventDetailList.get(position);
holder.productName.setText(productEventDetail.getProductName()+ " xxxx xxxxxxxxxxxxxxxx..");
holder.progressBar.setProgress(productEventDetail.getEventProgressStatus());
holder.progressDisplay.setText(String.valueOf(productEventDetail.getEventProgressStatus())+"% ");
Glide.with(context)
.load(productEventDetail.getProductImageUrl())
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.fitCenter()
.into(holder.imageView);
}
@Override
public int getItemCount() {
return productEventDetailList.size();
}
private void callProductEventDetails(){
Intent intent= new Intent(context, ProductEventDetailActivity.class);
intent.putExtra("eventStatus","inProgress");
context.startActivity(intent);
}
public static void setAllParentsClip(View v, boolean enabled) {
while (v.getParent() != null && v.getParent() instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) v.getParent();
viewGroup.setClipChildren(enabled);
viewGroup.setClipToPadding(enabled);
v = viewGroup;
}
}
}
Haben Sie es tun? –
@ FlorescuGeorgeCătălin yeah ... Ich habe es teilweise getan, ich kann das Bild in den Warenkorb mit seiner Größe als statische senden ... aber die Größe ändern, wie es nach oben führt es vom Ziel weg ... aber wenn es ein Bild ist mit statischer Größe bewegt es sich genau in den Warenkorb ... – Moulesh
Mit diesem Code? –