项目中遇到这样个需求:应用的功能导航需要可拖动排序,类似头条中的频道拖动管理。效果如下,gif不是很顺畅,真机会好很多。
虽然类似的文章网上搜一下有很多,但写的都不令人满意,注释不清晰,而且动画还不够流畅。经本人整理优化后,拿出来供后续有需要的使用。
<>强实现原理:强>
-
<李>显示数据表格作为基本控件李>
<李> WindowManager.addView的方式实现可拖动的视图李>
<李> TranslateAnimation实现移动动画,动画完后更新适配器即可
李>
主要的实现原理上面已经说明,源码中关键的地点也有注释,因此下面直接上源码。
包com.hai.draggrid; 进口android.content.Context; 进口android.graphics.Bitmap; 进口android.graphics.PixelFormat; 进口android.util.AttributeSet; 进口android.view.Gravity; 进口android.view.MotionEvent; 进口android.view.View; 进口android.view.WindowManager; 进口android.view.animation.Animation; 进口android.view.animation.TranslateAnimation; 进口android.widget.AdapterView; 进口android.widget.BaseAdapter; 进口android.widget.GridView; 进口android.widget.ImageView;/* * *长按拖动图标可以调整项位置的显示数据表格 *由huanghp lastposition=" + lastposition//+”,pointToPosition=" + pointToPosition (x, y) +”, ismove=" + isMoving); 如果(dragImageView !=零,,lastPosition !=INVALID_POSITION) {//如果(isMoving)刷:java; "> String[]项=new String[]{“头条”,“视频”,“娱乐”,“体育”、“北京”,“新时代” 网,“易号”、“段子”,“冰雪运动”,“科技”,“汽车”,“轻松一刻” 时,“尚”、“直播”、“图片”,“跟帖”,“NBA”、“态度公开的课” ”推荐”、“热点”,“社会”、“趣图”,“美女”、“军事"}; 显示数据表格。setAdapter(新DragGridView.Adapter () { @Override 公共空间交换(int起动位置,int endPositon) { 超级。交易所(起动位置,endPositon); 字符串条目=list.get(起动位置); 如果(起动位置& lt;endPositon) { 列表。添加(endPositon + 1项); list.remove(起动位置); 其他}{ 列表。add (endPositon、项); 列表。删除(起动位置+ 1); } for (int i=0;我& lt;list.size ();我+ +){ 日志。e(标签,“交换:=" + list.get(我)); } notifyDataSetChanged (); } …省略部分代码 @Override 公众视线getView (int位置、视图convertView ViewGroup父){//todo,这里需要优化,没有复用观点。也不能按传统方式服用视图,否则会造成拖动的视图空白//如果(convertView==null) { convertView=getLayoutInflater () .inflate(出来。项,家长,假);//} ((TextView) convertView.findViewById (R.id.tv)) . settext (getItem(位置); 如果(isDrag,,位置==holdPosition) { convertView.setVisibility (View.INVISIBLE); }其他convertView.setVisibility (View.VISIBLE); 返回convertView; } });
本文到这就结束了,有需要的同学拿到轮子就可以直接使用了,谢谢!
不知道有没有眼尖的同学发现Adapterd的getView方法中有个todo需要优化。原因是这样:如果打开注释中的代码,复用convertView,会造成显示数据表格释放后的新位置一片空白,不知道什么原因,因此折中的方法就是每次都是新生成一个convertView。
希
以上所述是小编给大家介绍的Android自定义显示数据表格仿头条频道拖动管理功能,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持。
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!