安卓 让View追随你的手指移动、移动~

先来个图吧



大概的效果就是这样,代码就一个监听事件,把需要移动的View添加这个监听事件就可以了,具体的参数要根据自己的项目情况而定。

private View.OnTouchListenershopCarSettleTouch =new View.OnTouchListener() {

int rawY1,rawX1,rawY,rawX;//手指落下和抬起的位置 用来判断用户是移动图标还是点击事件

    int rr,ll;//当用户放开手指的时候  ,通过位置判断 让View自动靠边

    int lastX,lastY;// view的的当前位置  用来计算更新view的位置

    @Override

    public boolean onTouch(View v, MotionEvent event) {

int ea = event.getAction();

DisplayMetrics dm = getResources().getDisplayMetrics();

int screenWidth = dm.widthPixels;

int screenHeight = dm.heightPixels;//需要减掉图片的高度

        switch (ea) {

case MotionEvent.ACTION_DOWN:

lastX = (int) event.getRawX();//获取触摸事件触摸位置的原始X坐标

                lastY = (int) event.getRawY();

rawX1 = (int) event.getRawX();

rawY1 = (int) event.getRawY();

case MotionEvent.ACTION_MOVE:

//event.getRawX();获得移动的位置

                int dx = (int) event.getRawX() -lastX;

int dy = (int) event.getRawY() -lastY;

int l = v.getLeft() + dx;

int b = v.getBottom() + dy;

int r = v.getRight() + dx;

int t = v.getTop() + dy;

//下面判断移动是否超出屏幕

                if (l <0) {

l =0;

r = l + v.getWidth();

}

if (t <30) {

t =30;

b = t + v.getHeight();

}

if (r > screenWidth) {

r = screenWidth;

l = r - v.getWidth();

}

if (b > screenHeight -200) {

b = screenHeight -200;

t = b - v.getHeight();

}

v.layout(l, t, r, b);

lastX = (int) event.getRawX();//获取触摸事件触摸位置的原始X坐标

                lastY = (int) event.getRawY();

v.postInvalidate();

break;

case MotionEvent.ACTION_UP:

this.rawX = (int) event.getRawX();

this.rawY = (int) event.getRawY();

if (v.getLeft() < (screenWidth /2 + v.getWidth() /2)) {

ll =20;

rr =ll + v.getWidth();

}

if (v.getRight() > (screenWidth /2 + v.getWidth() /2)) {

rr = screenWidth -20;

ll =rr - v.getWidth();

}

v.layout(ll, v.getTop(),rr, v.getBottom());

v.postInvalidate();

if (Math.abs(this.rawX -rawX1) >20 || Math.abs(this.rawY -rawY1) >20) {

return true;

}

break;

}

return false;

}

};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容