View 拖动&插入
即: 支持 拖动图标 然后把之插入 2个View 之间
为了降低难度 选用了若干ImageView 放入ViewGroup : vertical LinearLayout
[代码 步骤]
1. 定义布局:main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/linear"
>
<ImageButton
android:layout_width="100dip"
android:layout_height="100dip"
android:src="@drawable/beijing1_b"/>
<ImageButton
android:layout_width="100dip"
android:layout_height="100dip"
android:src="@drawable/beijing2_b"/>
<ImageButton
android:layout_width="100dip"
android:layout_height="100dip"
android:src="@drawable/beijing3_b"/>
<ImageButton
android:layout_width="100dip"
android:layout_height="100dip"
android:src="@drawable/beijing3_b"/>
</LinearLayout>
2. 变量初始化
lLayout = (LinearLayout)findViewById(R.id.linear);
3. 定义OnTouchListener 用于监听所有动作 并注册LinearLayour的所有View 实现为:
touchListener = new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction();
int x = (int) event.getRawX();
int y = (int) event.getRawY();
switch(action){
//鼠标按下 拖拉动作开始
case MotionEvent.ACTION_DOWN:
point1 = v.getTop();
startX = (int)event.getX();
startY = y - v.getTop();
break;
//鼠标移动 拖拉动作进行中
case MotionEvent.ACTION_MOVE:
v.layout(x - startX, y - startY, x + v.getWidth()
- startX, y - startY + v.getHeight());
v.bringToFront();
v.postInvalidate();
break;
//鼠标释放 拖拉动作结束
case MotionEvent.ACTION_UP:
point2 = v.getTop();
//计算插入位置 位于哪两个相邻View之间
int dest = getLocation(v);
//remove ori view, and then add view here
lLayout.removeView(v);
lLayout.addView(v, dest);
break;
}
return false;
}
};
//to listener all ImageView
for(int i=0;i<lLayout.getChildCount();i++){
ImageView iv = (ImageView)lLayout.getChildAt(i);
if(iv !=null){
iv.setOnTouchListener(touchListener);
}
else {
//error, view is null!
}
}
4. getLocation(View) 用于: 根据目标View 判断待插入的位置 即:哪2个相邻ImageView 之间 实现为:
public int getLocation(View v){
for(int i=0;i<lLayout.getChildCount()-1;i++){
ImageView iv = (ImageView)lLayout.getChildAt(i);
ImageView iv2 = (ImageView)lLayout.getChildAt(i+1);
if(iv.getTop()< v.getTop() && iv2.getTop() > v.getTop()){
//refer delta of point1 & point2
if(point1 < point2){//drag to bottom
return i+1;
}
else {//drag to up
return i+1;
}
}
}
//otherwise return last location
return lLayout.getChildCount()-1;
}
5. emulator 运行截图:
- 拖拉前:
- 拖拉后:
分享到:
相关推荐
自定义 LayoutManager 实现一个流动布局,可以用作文章展示,也可以用作标签展示,并且可以很方便地为其添加布局动画,示例代码里添加了拖拽插入的动画,如效果图。 对齐方式可选4中: 向左对齐 向右对齐 居中对齐 ...
默认外观具有精美的平面设计,它具有用于呈现,插入,删除和更新动作的内置动画功能,并且是完全可自定义的,能够通过属性属性和委托方法来更改颜色,标签文本,字体。 内容由遵循Apple内置控件标准的数据源对象...
13.2 使用MS Quick View预览和打开文件 13.2.1 预览和打开Visio文件 13.2.2 打开非Visio文件 13.3 小结 第14章 绘图预览和打印 14.1 使用打印预览窗口 14.1.1 打印预览按钮 14.1.2 其他打印预览...
13.2 使用MS Quick View预览和打开文件 13.2.1 预览和打开Visio文件 13.2.2 打开非Visio文件 13.3 小结 第14章 绘图预览和打印 14.1 使用打印预览窗口 14.1.1 打印预览按钮 14.1.2 其他...
但这都不是重点,你完全不用看懂它的语言也可以进行原型设计(该软件本身就是靠自己设计出来),我们也可以在Balsamiq Mockups的菜单里选择View -> Use System Font来输入中文。 Balsamiq Mockups的优点和特色: ...
有其他需求也可用 cover-view 添加 收藏 点赞 评论等功能 效果图: video官方介绍: https://developers.weixin.qq.com/miniprogram/dev/component/video.html swiper官方介绍: ...
A: 拖动页标签到目的位置。 Q: 我想查看所有的字段及变量,我想在报表中使用列表来实现它? A: 设置 TfrReport.MixVariablesAndDBFields := True.现在,所有的数据字段及变量可在“插入数据字段”对话框中可存取...
序号 CAD命令 简写 用途 1 3D 创建三维实体 2 3DARRAY 3A 三维阵列 3 3DCLIP 设置剪切平面位置 4 3DCORBLT 继续执行3DORBIT命令 5 3DDISTANCE 距离调整 6 3DFACE 3F 绘制三维曲面 ...302 VIEW –V...
要设置幻灯片背景为view.jpg图画,需要对幻灯片进行的操作是_____。(4分) (A) 插入 图片 来至文件 (B) 插入 图片 剪贴画 (C) 背景 效果填充 图片 (D) 背景 渐变 预设 参考答案:C 8. 设置背景时,若使所选择的...
ps:该效果用来做tr的拖动会很方便。 接着想到的是给table插入一个新tr,克隆原来的tr,并设置这个tr为fixed(ie6为absolute),例如: Code <!DOCTYPE ...
【插入行数】 对工作表隔行插入行并可以复制标题行,其中对相隔行数、插入行数等可以自定义。 【注解样式】 可以插入多达50种样式的注解,支持随时切换当前注解样式为指定的样式。 【工作表拆分】 将当前工作表的...
查看网页源代码 onclick="window.location = "view-source:"+ "http://www.csdn.net/""> 关闭输入法 自动全选 ()"> ENTER键可以让光标移到下一个输入框 (event.keyCode==13)event.keyCode=9"> 文本框的...
6.Flash查看(View)菜单中,Work Area表示? A. 将作品编辑区域以“工作区”方式显示 B. 在编辑区域中显示标尺 C. 在编辑区域中显示底格辅助线 D. 设置“磁铁”功能 7.Flash5中,Common Library默认共有几类公用...
解决了IPC Compliant Footprint Wizard中的回归问题,当未选择Full Matrix时,无法更改(或插入)LGA,BGA包布局选项的任何参数。 26459 修复了“属性”面板中的“网络类别”排序,以匹配软件其他区域中使用的网络...
43 <br>0061 树的实现 44 <br>3.2 排序 48 <br>0062 如何实现选择排序算法 48 <br>0063 如何实现冒泡排序算法 49 <br>0064 如何实现快速排序算法 50 <br>0065 如何实现插入排序算法 ...
0089 实现直接插入法排序 61 第4章 函数应用 63 4.1 字符串处理函数 64 0090 使用Uppercase函数将小写字母转换为大写字母 64 0091 使用Lowercase函数将大写字母转换为小写字母 64 0092 使用Copy函数获取...
0089 实现直接插入法排序 61 第4章 函数应用 63 4.1 字符串处理函数 64 0090 使用Uppercase函数将小写字母转换为大写字母 64 0091 使用Lowercase函数将大写字母转换为小写字母 64 0092 使用Copy函数获取...