Android控件拖动的实现
2012-04-13 17:03
302 查看
这个也是从网上得到的代码,例子比较简单,但是如果有需要此功能的,这个例子可以提供很多提示,首先,给个截图
这个是拖动以后的效果,一个imageview和一个button控件,提供两份代码下载吧,一份是只有一个Button的,另一份就是像上图,就是多了一个imagview!先看下代码吧,比较简单:
[java]
view plaincopy
public class DraftTest extends Activity implements OnTouchListener{
/** Called when the activity is first created. */
int screenWidth;
int screenHeight;
int lastX;
int lastY;
@Override
public 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);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int 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;
}
}
高度减去50是减去状态栏和标题栏的高度。
[java]
view plaincopy
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
然后获取控件一开始的位置,然后在ACTION_MOVIE中:
[java]
view plaincopy
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))的y轴距离,getRight()是控件右边距离父控件原点的y轴距离,同理,getTop和getButtom是距离的x轴距离。
[java]
view plaincopy
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();
}
这里的判断是为了是控件不超出屏幕以外,即:到达边界以后,不能再移动。
[java]
view plaincopy
v.layout(left, top, right, bottom);
设置View的位置。
有一点忘记说了,就是像ImageView和TextView这些控件,要想实现拖动,要在xml文件中设置它的clickable为true。
[java]
view plaincopy
android:clickable="true"
就这样,这些就是这个demo的全部内容。
最后,是代码的下载地址:
http://download.csdn.net/detail/aomandeshangxiao/4187376, http://download.csdn.net/detail/aomandeshangxiao/4189910
这个是拖动以后的效果,一个imageview和一个button控件,提供两份代码下载吧,一份是只有一个Button的,另一份就是像上图,就是多了一个imagview!先看下代码吧,比较简单:
[java]
view plaincopy
public class DraftTest extends Activity implements OnTouchListener{
/** Called when the activity is first created. */
int screenWidth;
int screenHeight;
int lastX;
int lastY;
@Override
public 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);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int 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;
}
}
高度减去50是减去状态栏和标题栏的高度。
[java]
view plaincopy
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
然后获取控件一开始的位置,然后在ACTION_MOVIE中:
[java]
view plaincopy
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))的y轴距离,getRight()是控件右边距离父控件原点的y轴距离,同理,getTop和getButtom是距离的x轴距离。
[java]
view plaincopy
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();
}
这里的判断是为了是控件不超出屏幕以外,即:到达边界以后,不能再移动。
[java]
view plaincopy
v.layout(left, top, right, bottom);
设置View的位置。
有一点忘记说了,就是像ImageView和TextView这些控件,要想实现拖动,要在xml文件中设置它的clickable为true。
[java]
view plaincopy
android:clickable="true"
就这样,这些就是这个demo的全部内容。
最后,是代码的下载地址:
http://download.csdn.net/detail/aomandeshangxiao/4187376, http://download.csdn.net/detail/aomandeshangxiao/4189910
相关文章推荐
- Android控件拖动的实现
- Android控件拖动的实现
- Android控件拖动的实现
- Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码
- Android拖动控件的实现,自定义可拖动的LinearLayout
- Android编程之控件可拖动的实现方法
- Android控件拖动实现
- 如何实现android控件的拖动效果
- Android控件拖动的实现
- Android控件拖动的实现
- Android实现控件拖动效果
- Android控件拖动的实现
- Android实现可拖动的悬浮按钮控件
- Android实现控件拖动的小Demo
- Android:全屏幕拖动控件的实现
- Android基于widget组件实现物体移动/控件拖动功能示例
- Android控件拖动的实现
- (ios实战)实现类似于android 的toast控件
- Android 常见 View 控件 滑动 和 拖动的几种方式
- Android控件TextView的实现原理分析