关于安卓卡片式交互实现(recyclerview)数学解题软件

作者: 小吴 2023-11-30 06:43:11
阅读(107)
安卓卡片式交互,已有很多案例,前有“探探”卡片滑动交互,后有各种各样的三方软件,都在互相复制粘贴。今项目中也有类似需求,特此记录。!!!代码链接在文末!!!演示gif演示思路实现这样的效果,其实从宏观上,就是实现了一个layoutmanger以及ItemTouchHelper。(一)LayoutManager主要是实现recyclerview的布局(二)ItemTouchHelper主要是实现用户滑动的时候,卡片的交互过程实现(一)重写LayoutManger首先,要确定的是,绘制多少个层级的布局。目前需求是显示三个叠加的item,因此,对于LayoutManager,我们只需要每次刷新的时候,绘制三次即可。(ps:开发过程应当把“层级”变量抽象全局化,适配“层级”变化的情况)核心代码如下:@OverridepublicvoidonLayoutChildren(RecyclerView.Recyclerrecycler,RecyclerView.Statestate){super.onLayoutChildren(recycler,state);detachAndScrapAttachedViews(recycler);intmaxCount=SlideConfig.SHOW_MAX_COUNT;//获取所有item(包括不可见的)个数intcount=getItemCount();//由于我们是倒序摆放,所以初始索引从后面开始intinitIndex=count-maxCount;if(initIndex<0){initIndex=0;}//当前顺序intcurrentIndex=0;for(inti=initIndex;i1){fraction=1;}intmaxCount=SlideConfig.SHOW_MAX_COUNT;inttrainY=SlideDpUtils.dp2px(SlideConfig.TRANSLATION_Y);//为每个child执行动画intcount=recyclerView.getChildCount();intadapterCount=mAdapter.getDataList().size();for(inti=0;imaxCount){//不是第一层--且数量大于3Viewview=recyclerView.getChildAt(i);view.setScaleX(1-(maxCount-i-1)*SlideConfig.SCALE+fraction*SlideConfig.SCALE);view.setTranslationY((maxCount-i-1)*trainY-fraction*trainY);}//intlevel=SlideConfig.SHOW_MAX_COUNT-i-1;//if(level!=SlideConfig.SHOW_MAX_COUNT)////获取的view从下层到上层//Viewview=recyclerView.getChildAt(i);//intlevel=SlideConfig.SHOW_MAX_COUNT-i-1;////level范围(SlideConfig.SHOW_MAX_COUNT-1)-0,每个child最大只移动一个SlideConfig.TRANSLATION_Y和放大SlideConfig.SCALE////if(level==SlideConfig.SHOW_MAX_COUNT-1){//最下层的不动和最后第二层重叠//view.setTranslationY(SlideConfig.TRANSLATION_Y*(level-1));//view.setScaleX(1-SlideConfig.SCALE*(level-1));//view.setScaleY(1-SlideConfig.SCALE*(level-1));//}elseif(level>0){//view.setTranslationY(level*SlideConfig.TRANSLATION_Y-fraction*SlideConfig.TRANSLATION_Y);//view.setScaleX(1-level*SlideConfig.SCALE+fraction*SlideConfig.SCALE);//view.setScaleY(1-level*SlideConfig.SCALE+fraction*SlideConfig.SCALE);//}}}catch(Exceptione){}super.onChildDraw(c,recyclerView,viewHolder,dX,dY,actionState,isCurrentlyActive);}这里,就实现了recyclerview卡片堆叠效果了。代码地址--库libslidrecyclerviewthat'sall---------------------------------------------------------------------