不得不承认,时间是一把杀猪刀..

private OnDragListener mOnDragListener=new OnDragListener() {@Overridepublic boolean onDrag(View v, DragEvent event) {switch (event.getAction()) {case DragEvent.ACTION_DRAG_STARTED:if(mDragView!=null){mDragView.setBackgroundResource(R.drawable.dsgl_draged_bg);}initRect();//初始化矩形。Log.i(TAG, "拖拽事件开始了");break;case DragEvent.ACTION_DRAG_LOCATION://int index;if((index=findTouchViewIndex(event))!=-1 && mDragView!=null && getChildAt(index)!= mDragView){removeView(mDragView);addView(mDragView, index);//然后把他加到这个位置,俺么如果 反过来写会发生什么呢? 提示已经有了一个父亲了,所以还是要解除父子关系的}
//              else{//试试乱套的感觉 //移到外边的位置
//                  mDragView.setBackgroundColor(Color.RED);
//                  removeView(mDragView);
//                  addView(mDragView);//  然后把他加
//              }break;case DragEvent.ACTION_DRAG_ENDED:if(mDragView!=null){mDragView.setBackgroundResource(R.drawable.dsgl_normal_bg);}break;default:break;}return true;//这里也要返回true}};

拖拽布局源码

/*** XML里面指定的columncount是无效的,用setColumnCount()* @author luozheng**/
public class DragSortGridLayout extends GridLayout {private static final String TAG = "DragSortGridLayout";public int COLUMN_COUNT=4;//无法获得每一个宽度可以用这个/4private List<? extends  IDragItem> mListDragItem;//被操作的数据private Context context;private boolean mAllowDrag;//是否允许脱宅private View mDragView;//被拖拽的控件public DragSortGridLayout(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);this.context=context;
//      this.setLayoutAnimation(controller);init();}public DragSortGridLayout(Context context, AttributeSet attrs) {this(context, attrs,0);}public DragSortGridLayout(Context context) {this(context,null);}private void init() {setColumnCount(COLUMN_COUNT);setLayoutTransition(new LayoutTransition());//这样等于在xml里面写的        android:animateLayoutChanges="true"}public void setAllowDrag(boolean value){this.mAllowDrag=value;//  // 意味着两件事情:// 要对gridlayout设置监听// 要对孩子设置长按事件,不能再此方法中设置,因为child会交换, 那咋搞,但是在布局里面他每次执行这样好吗如果//这个不是如果已经设置了监听onDragListener 那么每次都这样搞?? 但是没有办法咯}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, right, bottom);if(mAllowDrag){setOnDragListener(mOnDragListener);}else{setOnDragListener(null);}for (int i = 0; i < getChildCount(); i++) {getChildAt(i).setOnLongClickListener(mAllowDrag?mOnLongClickListener:null);}}public void setItem(final List<? extends IDragItem> listDragItem){this.mListDragItem=listDragItem;removeAllViews();//为了防止重复叠加先清除所有//不要用newHnader的post,  放到post里面才能获取到width,不过不知道用测量可以不可以post(new Runnable() {@Overridepublic void run() {addItemViews(listDragItem);Log.i(TAG,"宽度"+getWidth());}});}private void addItemViews(List<? extends IDragItem> listDragItem) {for (IDragItem iDragItem : listDragItem) {addItemView(iDragItem);}}private int MARGIN=5;//每一个格子宽度/*** 根据一个iDragItem生成一个view添加到gridLayout中去* @param iDragItem*/public void addItemView(IDragItem iDragItem) {TextView tv=new TextView(context);tv.setTag(iDragItem);LayoutParams layoutParams=new LayoutParams();layoutParams.width=getWidth()/this.COLUMN_COUNT-2*this.MARGIN;//加上边距和layoutParams.height=LayoutParams.WRAP_CONTENT;layoutParams.setMargins(this.MARGIN, this.MARGIN, this.MARGIN, this.MARGIN);tv.setBackgroundResource(R.drawable.dsgl_normal_bg);tv.setGravity(Gravity.CENTER);tv.setText(iDragItem.getItemName()+",ff");tv.setTextSize(14);//指定的是sp也就是缩放像素tv.setOnClickListener(mOnClickListener);Log.i(TAG, "addItemView");addView(tv,layoutParams);//放到最后面
//      addView(tv,0,layoutParams);}public List<? extends IDragItem> getItem(){List<  IDragItem>  listDragItem=new ArrayList<IDragItem>();for (int i = 0; i <getChildCount(); i++) {IDragItem iDragItem = (IDragItem) getChildAt(i).getTag();listDragItem.add(iDragItem);}return listDragItem;
//      return this.listDragItem;}public interface IDragItem{public String getItemName();}Rect[] mChildRects;private void initRect() {int childCount =getChildCount();//获取布局中孩子的总数mChildRects = new Rect[childCount];//批量new矩形数组。。。然后给这数组的孩子 组个赋值高宽for (int i = 0; i < childCount; i++) {View child =getChildAt(i);mChildRects[i] = new Rect(child.getLeft(), child.getTop(),child.getRight(), child.getBottom());}}//查找gridlayout里面view的总数  也就是通过event.getx和gety判断这个坐标是不是在里面矩形的区域private int findTouchViewIndex(DragEvent event) {int childCount = getChildCount();for (int i = 0; i < childCount; i++) {if (mChildRects[i].contains((int) event.getX(),(int) event.getY())) {return i;}}return -1;}/*** 拖拽监听*/private OnDragListener mOnDragListener=new OnDragListener() {@Overridepublic boolean onDrag(View v, DragEvent event) {switch (event.getAction()) {case DragEvent.ACTION_DRAG_STARTED:if(mDragView!=null){mDragView.setBackgroundResource(R.drawable.dsgl_draged_bg);}initRect();//初始化矩形。Log.i(TAG, "拖拽事件开始了");break;case DragEvent.ACTION_DRAG_LOCATION://int index;if((index=findTouchViewIndex(event))!=-1 && mDragView!=null && getChildAt(index)!= mDragView){removeView(mDragView);addView(mDragView, index);//然后把他加到这个位置,俺么如果 反过来写会发生什么呢? 提示已经有了一个父亲了,所以还是要解除父子关系的}
//              else{//试试乱套的感觉 //移到外边的位置
//                  mDragView.setBackgroundColor(Color.RED);
//                  removeView(mDragView);
//                  addView(mDragView);//  然后把他加
//              }break;case DragEvent.ACTION_DRAG_ENDED:if(mDragView!=null){mDragView.setBackgroundResource(R.drawable.dsgl_normal_bg);}break;default:break;}return true;//这里也要返回true}};/*** 长按那些矩形的监听 长按后就能让拖拽开始了*/private OnLongClickListener mOnLongClickListener=new OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {DragSortGridLayout.this.mDragView=v;v.startDrag(null, new DragShadowBuilder(v), null, 0);//new的v就是阴影形成的那个v 也就是图形副本吧。return true;}};private OnClickListener mOnClickListener=new OnClickListener() {@Overridepublic void onClick(View v) {if(mOnItemClickListener!=null){mOnItemClickListener.onItemClick(v, (IDragItem) v.getTag());}}};public interface OnItemClickListener{public void onItemClick(View v,IDragItem dragItem);}public void setOnItemClickListener(OnItemClickListener onItemClickListener){this.mOnItemClickListener=onItemClickListener;}private OnItemClickListener mOnItemClickListener=null;}

http://www.taodudu.cc/news/show-4639108.html

相关文章:

  • 入侵前的信息刺探
  • PMP备考之路 - 敏捷实践第五讲(实施敏捷:在敏捷环境中交付)
  • 《Python绝技:运用Python成为顶级黑客》 用Python刺探网络
  • 《脚本》Scapy刺探星巴克无线网,记录顾客信息
  • scapy刺探星巴克无线网,记录顾客信息
  • 基于SNMP的信息刺探扫描与防护策略
  • web安全之信息刺探防范(下)
  • 用工具刺探主机通信和用系统ping命令有何区别
  • NC 网络刺探利器
  • XSS信息刺探脚本
  • Nmap入门:隐私刺探
  • c语言printf snm,vc++实现SNMP信息刺探程序
  • 渗透测试第一弹:信息刺探
  • 破解某助手刺探功能---第二篇smali代码实现
  • 社会工程学之信息刺探
  • web 端口刺探
  • ***测试第一弹:信息刺探
  • Mac电脑键盘(ujmiko)不能使用问题记录
  • 这封面,真绝了呀!
  • 转载——***《体育之研究》
  • 不要妄想消费者忠诚于我们的品牌!
  • 海明码原理
  • 客户体验技术领军企业Alvaria, Inc.宣布完成对近期收购的Aspect和Noble Systems的整合
  • 云栖专辑 | 阿里开发者们的20个感悟,一通百通
  • 云栖专辑 | 阿里开发者们的20个感悟,一通百通
  • Swift Podcast: Chris Lattner 讲述 Swift 起源故事
  • github学习记录
  • Python变量,常量,基础数据类型,input用户交互
  • 爱彼迎招募“周末玩家”,住遍“匠心”民宿系列
  • Docker系列:梦开始的地方(1)——Windows10环境下的Docker安装、更改镜像源和更改默认镜像容器存储地址

刺探内心深处远古的记忆OnDragListener相关推荐

  1. 有时,我们都是一只孤独的“刺猬”,当只有频率相同时,才能看见彼此内心深处不为人知的优雅。这世上一定有一个能感受到自己的人,那人

    有时,我们都是一只孤独的"刺猬",当只有频率相同时,才能看见彼此内心深处不为人知的优雅.这世上一定有一个能感受到自己的人,那人未必是恋人,未必是朋友,他可能是人群中的那一个人.在偌 ...

  2. 嵌入式入门和项目实战开发【菜鸟内心深处最真实感想篇】

    菜鸟 参加嵌入式入门和项目实战开发后[终于拿到年到10万了]--千真万确!!绝无虚言!!!        这里述说我菜鸟学习嵌入式的内心深处最真实感受!!![希望大家不要拍砖]我只是我的学习嵌入式过程 ...

  3. [原创日志#2005年3月23号] 每个人的内心深处都是诗人

    从一本杂志中看到一句话,我一直想提起:每个人的内心深处都是诗人.尽管自己现在变得比较的寡言,但是我依旧愿意和一些陌生人谈话,我希望自己的言语能够给他们带来欢喜,带来愉悦,带来一份同感的兴奋.事实上,很 ...

  4. 一些零碎的语言,却触动到内心深处。

    为时代发声 听到的一些声音: 子曰:群居终日,言不及义,好行小慧,难矣哉.孔子是在说别刷朋友圈了,你以为那是真实的世界吗?不,那是一个小小的固化的圈子把你给围拢住了,渐渐的我们的关心就从自己内心灵魂的 ...

  5. Vue纯零基础教学第三天--到走入Vue项目实际开发的内心深处

    让我们手摸着手大步向前走 ,最近看完 曾国藩传,觉得很不错,还有杜月笙与孟小冬 ,推荐大家在写代码的时候,要多读书,好增加自己的文艺气息.多些对书的感悟,放心游戏,多出去走走,今天的北京 真冷 3月3 ...

  6. 何为三层架构?与两层有何区别,他是有啥独特之处呢?让我们走进三层架构的内心深处。

    快端个小板凳儿来听我给你讲故事呀,听听三层架构吧 什么是三层架构? 三层架构详解 为什么使用三层? 与两层的区别?? 三层架构的优势 三层架构的优劣势 什么是三层架构? UI(表现层): 主要是指与用 ...

  7. RabbitListener的“内心深处”

    前言 最近读书读到了一段话对我触动非常深 ,分享给大家.拖延是做一部分事情的前奏,如果拖延你就没有时间供专注模式稳扎稳打,只能够走马观花的看上一遍.这样会增加你的压力,因为你清楚自己必须完成一个很讨厌 ...

  8. 谁能真正明白月如内心深处?

    当月如为灵儿逍遥奋力挥舞蒲公英 脸上挂着满足而忧郁的笑容时 谁能明白? 当月如为灵儿安全拼命保护赵灵儿 看见逍遥灵儿幸福自己走开时 谁能明白? 当月如告诉逍遥无论所遇到什么事 叫他一定先救灵儿不管自己 ...

  9. 与技术无关的一篇文章,记录下内心深处

    距上一次写博客有三个月的时间了,这三个月的时间里我干了什么,我也不知道.         写这篇博客没有什么思路,只是想把现在所想的一些东西用文字记录下来.刚开始来CSDN的时候,它对于我来说是一个寻 ...

最新文章

  1. IOS时间传递机制简记
  2. Centos安装图形化界面
  3. Python守护进程和脚本单例运行
  4. 针织erp_编程源于我们长期的针织工作
  5. java quartz mybatisplus_Springboot+redis+SpringMVC+Mybatis Plus分布式开发系统源码
  6. 原生js 实现购物车价格和总价 统计
  7. Windows API-GDI入门基础知识详解(1)
  8. LinkedList 链表总结
  9. 大数据挑战:敢不敢不要加入人的判断?
  10. 小技巧:电脑怎么卸载软件?
  11. 微博 php7,PHP_迁移PHP版本到PHP7,今天看到微博上说phpng也就是ph - phpStudy
  12. matlab语言与测绘,MATLAB语言及测绘数据处理应用
  13. updating mysql.pid_启动mysql ERROR! The server quit without updating PID file
  14. 【转载】冗余与热备的概念区别
  15. 生成对抗网络的判别器_生成对抗网络的随机天气发生器
  16. GIT常见问题及命令指南
  17. python菜鸟学习Day9(requests,套接字socket)
  18. Android 高级工程师面试(一)
  19. Unity ForceMode
  20. java老鼠走迷宫算法_老鼠走迷宫java算法

热门文章

  1. 【C语言】:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
  2. 教你如何在线播放FLV格式的文件
  3. 15.2 Content-Length 实体的大小
  4. mvc api服务器文件上传,springMVC:跨服务器上传文件报409
  5. Elasticsearch(二):理解index, Document, Field
  6. 中俄博览会谈下大单 云从科技“展”露头角
  7. 做了一个艰难的决定--
  8. python爬虫翻页代码 豆瓣_Python爬虫 豆瓣动态页面的爬取
  9. 我的Ubuntu装机配置
  10. 下载微信公众号或订阅号的文章封面图片