android实现图片选择拖拽控件-创新互联
1.使用RecyclerView
创新互联专业成都网站建设、成都网站设计,集网站策划、网站设计、网站制作于一体,网站seo、网站优化、网站营销、软文发稿等专业人才根据搜索规律编程设计,让网站在运行后,在搜索中有好的表现,专业设计制作为您带来效益的网站!让网站建设为您创造效益。使用RecyclerView可以轻松实现图片切换时的动画过程,这点要好于GridView。
2. 拖拽的实现
Dragmanager
继承View.OnDragListener,对拖拽过程中进行操作,
Action_drag_started 获取到操作的Item
Action_Drag_location 根据每个停留的位置判断是否交换item的位置。
Action_Drag_ended 跟新位置
DragSortAdapter
抽象类,为recyclerView 增加onItemTouchListener和onScrollListener, 记录onTouch的item,并在拖拽过程中判断recyclerview是否可以滚动,从而在拖拽的item快到边界时滚动recyclerView,使可以与本来在屏幕上不可见的item进行交换位置。
ViewHolder
ViewHolder 实现startDrag方法
2.itemDecoration
为recyclerview item增加divider,可以有两种方式,覆盖onDraw方法绘制itemDivider,或者覆盖getItemOffsets方法,使item之间可以分隔开。
3.GridlayoutManager
当recyclerview嵌入到scrollview中时,需要复写LayoutManager,在这里复写其中的onMeasure方法,需要计算每个item的高度或者宽度进行叠加,当recyclerview中item很多时,不要采用这种方式,回导致view不能复用,其中在计算item高度时,需要加上每个item的itemOffsets,查看recyclerview的源码发现,无法直接获取到item的offsets,最终采用反射的方式获取到其值:
try { Method method = recyclerView.getClass().getDeclaredMethod("getItemDecorInsetsForChild",View.class); method.setAccessible(true); final Rect insets = (Rect)method.invoke(recyclerView, child); itemDecorationHeight = heightUsed + insets.height(); itemDecorationWidth = widthUsed + insets.width(); } catch (NoSuchMethodException e){ Log.d("FullGridLayoutManager","no method found"); }catch(IllegalAccessException e){ Log.d("FullGridLayoutManager","IllegalAccessException"); }catch (InvocationTargetException e){ Log.d("FullGridLayoutManager","InvocationTargetException"); }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享标题:android实现图片选择拖拽控件-创新互联
文章网址:http://myzitong.com/article/djdseg.html