Android控件拖动实例详解
Android控件拖动
Android控件的拖动,主要是通过设置控件的setOnTouchListener()方法,重写它的onTouch()方法。然后通过MotionEvent的不同事件,进行判断,主要是在MotionEvent.ACTION_MOVE中不断重绘控件在画布中的位置,而实现拖动的效果。
publicclassDragViewActivityextendsAppCompatActivity{
privateButtonbtn_drag;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drag_view);
//获取屏幕的宽高
DisplayMetricsdm=getResources().getDisplayMetrics();
finalintscreenWith=dm.widthPixels;
finalintscreenHeight=dm.heightPixels;
btn_drag=(Button)findViewById(R.id.btn_drag);
btn_drag.setOnTouchListener(newView.OnTouchListener(){
intlastX;
intlastY;
booleanisDraging=false;
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
intee=event.getAction();
switch(ee){
caseMotionEvent.ACTION_DOWN:
isDraging=true;
lastX=(int)event.getRawX();
lastY=(int)event.getRawY();
break;
caseMotionEvent.ACTION_MOVE:
if(isDraging){
//x轴方向的位移差
intdx=(int)event.getRawX()-lastX;
//y轴方向的位移差
intdy=(int)event.getRawY()-lastY;
intl=v.getLeft()+dx;
intt=v.getTop()+dy;
intr=v.getRight()+dx;
intb=v.getBottom()+dy;
//判断超出屏幕
if(l<0){
l=0;
r=l+v.getWidth();
}
if(t<0){
t=0;
b=t+v.getHeight();
}
if(r>screenWith){
r=screenWith;
l=r-v.getWidth();
}
if(b>screenHeight){
b=screenHeight;
t=b-v.getHeight();
}
//重绘view
v.layout(l,t,r,b);
v.postInvalidate();
lastX=(int)event.getRawX();
lastY=(int)event.getRawY();
}
break;
caseMotionEvent.ACTION_UP:
isDraging=false;
break;
default:
break;
}
returnfalse;
}
});
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!