Android控件拖动的实现
来源:互联网 发布:oracle数据库同步 编辑:程序博客网 时间:2024/05/16 14:37
这个也是从网上得到的代码,例子比较简单,但是如果有需要此功能的,这个例子可以提供很多提示,首先,给个截图
这个是拖动以后的效果,一个imageview和一个button控件,提供两份代码下载吧,一份是只有一个Button的,另一份就是像上图,就是多了一个imagview!先看下代码吧,比较简单:
public class DraftTest extends Activity implements OnTouchListener{/** Called when the activity is first created. */int screenWidth;int screenHeight;int lastX;int lastY;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);DisplayMetrics dm = getResources().getDisplayMetrics();screenWidth = dm.widthPixels;screenHeight = dm.heightPixels - 50;Button button=(Button)findViewById(R.id.btn);ImageView imageView=(ImageView)findViewById(R.id.btn2);imageView.setOnTouchListener(this);button.setOnTouchListener(this);}@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubint action=event.getAction();Log.i("@@@@@@", "Touch:"+action);//Toast.makeText(DraftTest.this, "λ�ã�"+x+","+y, Toast.LENGTH_SHORT).show();switch(action){case MotionEvent.ACTION_DOWN:lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;/** * layout(l,t,r,b) * l Left position, relative to parent t Top position, relative to parent r Right position, relative to parent b Bottom position, relative to parent * */case MotionEvent.ACTION_MOVE:int dx =(int)event.getRawX() - lastX;int dy =(int)event.getRawY() - lastY;int left = v.getLeft() + dx;int top = v.getTop() + dy;int right = v.getRight() + dx;int bottom = v.getBottom() + dy;if(left < 0){left = 0;right = left + v.getWidth();}if(right > screenWidth){right = screenWidth;left = right - v.getWidth();}if(top < 0){top = 0;bottom = top + v.getHeight();}if(bottom > screenHeight){bottom = screenHeight;top = bottom - v.getHeight();}v.layout(left, top, right, bottom);Log.i("@@@@@@", "position��" + left +", " + top + ", " + right + ", " + bottom); lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;case MotionEvent.ACTION_UP:break; }return false;}}
case MotionEvent.ACTION_DOWN:lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;
然后获取控件一开始的位置,然后在ACTION_MOVIE中:
int dx =(int)event.getRawX() - lastX;int dy =(int)event.getRawY() - lastY;int left = v.getLeft() + dx;int top = v.getTop() + dy;int right = v.getRight() + dx;int bottom = v.getBottom() + dy;if(left < 0){left = 0;right = left + v.getWidth();}if(right > screenWidth){right = screenWidth;left = right - v.getWidth();}if(top < 0){top = 0;bottom = top + v.getHeight();}if(bottom > screenHeight){bottom = screenHeight;top = bottom - v.getHeight();}v.layout(left, top, right, bottom);Log.i("@@@@@@", "position��" + left +", " + top + ", " + right + ", " + bottom); lastX = (int) event.getRawX();lastY = (int) event.getRawY();
getLeft()方法得到的是控件坐标距离父控件原点(左上角,坐标(0,0))的x轴距离,getReght()是控件右边距离父控件原点的x轴距离,同理,getTop和getButtom是距离的y轴距离。
if(left < 0){left = 0;right = left + v.getWidth();}if(right > screenWidth){right = screenWidth;left = right - v.getWidth();}if(top < 0){top = 0;bottom = top + v.getHeight();}if(bottom > screenHeight){bottom = screenHeight;top = bottom - v.getHeight();}这里的判断是为了是控件不超出屏幕以外,即:到达边界以后,不能再移动。
v.layout(left, top, right, bottom);
设置View的位置。
有一点忘记说了,就是像ImageView和TextView这些控件,要想实现拖动,要在xml文件中设置它的clickable为true。
android:clickable="true"
就这样,这些就是这个demo的全部内容。
最后,是代码的下载地址:
http://download.csdn.net/detail/aomandeshangxiao/4187376,
http://download.csdn.net/detail/aomandeshangxiao/4189910
- Android控件拖动的实现
- Android控件拖动的实现
- Android控件拖动的实现
- Android控件拖动的实现
- Android控件拖动的实现
- Android控件拖动的实现
- Android控件拖动的实现
- Android控件拖动实现
- Android拖动控件的实现,自定义可拖动的LinearLayout
- 如何实现android控件的拖动效果
- Android实现控件拖动的小Demo
- Android:全屏幕拖动控件的实现
- Android控件的拖动
- Android 控件的拖动
- Android实现控件拖动效果
- WPF下实现控件的拖动操作
- Android-满屏幕拖动的控件
- Android-满屏幕拖动的控件
- ORACLE TEXT DATASTORE PREFERENCE(一)
- oracle 表解锁
- KVM桥接网络的
- iptables 与apache杂记
- Android HAL JNI
- Android控件拖动的实现
- jQuery选择器中含有空格的注意事项
- OGNL表达式struts2标签“%,#,$”
- 新浪微博开发之授权用户登录的实现
- 浏览器模式详解
- 一次遍历找出整型数组中第二大数
- 如何:向文档添加页眉和页脚
- 何去何从
- listView动态加载数据分页