简单的实现控件的移动

由于比较简单,就直接上代码:

public class MyActivity extends Activity {
    private ImageView mIv;
     @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
       //布局文件就忽略了
       setContentView(R.layout.activity_main);
       mIv = (ImageView)findViewById(R.id.iv);
       //重点是设置触摸事件
        mIv.setOnTouchListener(new View.OnTouchListener() {

            private float mStartY;

            private float mStartX;

            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                switch (motionEvent.getAction()) {
                    case MotionEvent.ACTION_DOWN://手指按下
                        // 1手指会的一个开始坐标
                        mStartX = motionEvent.getRawX();
                        mStartY = motionEvent.getRawY();
                        break;
                    case MotionEvent.ACTION_MOVE://手指移动
                        // 2 获得移动后的坐标
                        float newX = motionEvent.getRawX();
                        float newY = motionEvent.getRawY();
                        //3 获得两次坐标的差值
                        int dX = (int) (newX - mStartX);
                        int dY = (int) (newY - mStartY);

                        // 4 开始移动
                        // mView.layout();这个方法只能在activity中使用
                        params.x += dX;
                        params.y += dY;
                        //控制移动显示的位置不能超出屏幕边界
                        if(params.x<0)params.x=0;
                        if(params.y<0)params.y=0;
                        if(params.x>mWM.getDefaultDisplay().getWidth()-mView.getWidth()) {
                            params.x=mWM.getDefaultDisplay().getWidth()-mView.getWidth();
                        }
                        if(params.y>mWM.getDefaultDisplay().getHeight()-mView.getHeight()) {
                            params.y=mWM.getDefaultDisplay().getHeight()-mView.getHeight();
                        }

                        //5重新设置开始位置
                        mStartX = motionEvent.getRawX();
                        mStartY = motionEvent.getRawY();
                        // 多了一个通知更新
                        mWM.updateViewLayout(mView,params);
                        break;
                    case MotionEvent.ACTION_UP://手指抬起
                        //保存移动后的坐标,方便开始这个view还是现实在上次最后设置的位置
                        SPUtils.putInt(getApplicationContext(),Constacts.X,params.x);
                        SPUtils.putInt(getApplicationContext(),Constacts.Y,params.y);

                        break;
                }
                //此时返回必须是为true,move和up二个状态才会被激活
                return true;
            }
        });
    }
 }

以上,就可以实现控件的移动了!效果图就不发布了!见谅

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值