一、实例化控件,设置监听
maction = (ImageView) findViewById(R.id.action_icon);
//移动小球的类
toucherActionIcon = new ToucherActionIcon();
maction.setOnTouchListener(toucherActionIcon);
二、实现触碰接口然后在里面实现移动+重绘和单击事件
实现了OnTouchListener接口,覆写了onTouch方法,每次回调这个方法通过x和y变量记录当前的坐标。
ACTION_DOWN是在按下的时候调用(没抬起来只调用一次),通过xDelta和yDelta来记录第一次按下的点相对于控件左上角的位置,也就是相对距离。
ACTION_MOVE移动的时候不断调用,通过xDistance和yDistance来记录移动的相对距离作为leftMargin和topMargin再动态设置给控件。
最后,调用invalidate方法更新控件位置。
/**
* class name : ToucherActionIcon
* Specific description :actionbutton的移动和单击事件解决
*/
public class ToucherActionIcon implements View.OnTouchListener{
@Override
public boolean onTouch(View view, MotionEvent event) {
final int x = (int) event.getRawX();
final int y = (int) event.getRawY();
LogUtils.d(TAG, "onTouch: x= " + x + "y=" + y);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.L