控制 父布局上的 子View 边界

  //在空间上要显示的文字
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.toString().equals("")) {
                    tvInImage.setVisibility(View.INVISIBLE);
                } else {
                    tvInImage.setVisibility(View.VISIBLE);
                    tvInImage.setText(s);

                    //这在这里判断左边界
                    if(tvInImage.getX() < conPositionX){
                         tvInImage.setX(conPositionX);
                    }
                    //判断右边界
                    //判断上下 边界...
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });



final GestureDetector gestureDetector = new GestureDetector(this, new SimpleGestureListenerImpl());


        //移动
        imageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                gestureDetector.onTouchEvent(event);
                return true;
            }


        });
private int a = 0;
    //x方向和y方向移动量
    private float IntervalX, IntervalY;
    //移动
    private class SimpleGestureListenerImpl extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            //向右移动时,distanceX为负;向左移动时,distanceX为正
            //向下移动时,distanceY为负;向上移动时,distanceY为正

            IntervalX -= distanceX;
            IntervalY -= distanceY;
            a++;

            //设置移动量
            IntervalX = calPosition(conPositionX - tvInImage.getX(),
                    conPositionX + conWidth - (tvInImage.getX() + tvInImage.getWidth()),
                    IntervalX);
            IntervalY = calPosition(conPositionY - tvInImage.getY(), 
                    conPositionY + conHeight - (tvInImage.getY() + tvInImage.getHeight()),
                    IntervalY);

            //控制刷新频率
            if (a % 7 == 0) {
                tvInImage.setX(tvInImage.getX() + IntervalX);
                tvInImage.setY(tvInImage.getY() + IntervalY);
            }
            return true;
        }
    }


    //判断移动量是否超出 控件外, 超出就赋给最大移动量
    private float calPosition(float min, float max, float current) {
        if (current < min) {
            return min;
        }
        if (current > max) {
            return max;
        }
        return current;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值