前面的文章可以参考
去996每天累的一批,没什么时间学习好累QAQ
本篇其他做的优化不会赘述,只讲一讲动画的实现
虽然使用recycleview自带的动画也能达到差不多的效果,但是会造成白屏刷新之类的问题
所以选择了使用adapter的一个方法
public void onBindViewHolder(@NonNull GameAdapter.ViewHolder holder, int position, @NonNull List<Object> payloads)
这个方法可以让你根据payload来去决定是否全局刷新布局,我们可以通过上篇的滑动来顺便记录一下最后滑动的结果,并设置标志位,然后根据标志位来刷新
private void showAmination(){
//先展示被删除的
for(int i=0;i<MAPSIZE*MAPSIZE;i++){
if(isMerge[i]){
adapter.notifyItemChanged(i,"change");
}else if(isfirstAppear[i]){
adapter.notifyItemChanged(i,"appear");
}else{
adapter.notifyItemChanged(i,"");
}
}
}
然后在adapter里根据padload的值去设计动画
if(payloads.get(0).equals("change")){
ObjectAnimator animator = ObjectAnimator.ofFloat(holder.itemView, "scaleX", 1f, 1.2f,1f);
animator.setDuration(400);
animator.start();
}
else if(payloads.get(0).equals("appear")){
ObjectAnimator animator = ObjectAnimator.ofFloat(holder.itemView, "scaleX", 0f, 1f);
animator.setDuration(400);
animator.start();
}