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; } }); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!