gpt4 book ai didi

Android 从 Recyclerview 添加到购物车动画

转载 作者:行者123 更新时间:2023-12-05 07:46:21 29 4
gpt4 key购买 nike

我有一个显示产品列表的回收站 View ,每个回收站 View 行项目中都有一个购物车图标。单击购物车图标时,我希望产品图像复制重新缩放并移动到右上角到操作栏上的购物车图标

我的方法:

在 recyclerview 的 row item xml 中创建了一个 ImageView 并使其最初不可见。单击 recyclerview 中的购物车图标使该 ImageView 可见,并使用图像 url 填充 ImageView ,并从开始和结束位置添加翻译动画。

当前结果:

图像在相应的单个项目行内移动,一旦碰到行项目的边界就会消失。我的意思是图像不是从行项目出来的,没有到达顶部操作栏菜单项目。

尝试的解决方案:

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;
}
}

同样在xml中手动设置所有父级:

android:clipChildren="false"
android:clipToPadding="false"

图像在触及行项目的边界后仍然消失。任何建议都会有很大的帮助

我的 RecyclerView 适配器的代码:

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;
}
}
}

最佳答案

我想你正在寻找添加到购物车的动画, 你可以在这里找到解决方案 fly to cart animation

关于Android 从 Recyclerview 添加到购物车动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40840737/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com