美文网首页
android让控件在屏幕上自由拖动或者在一定范围内拖动

android让控件在屏幕上自由拖动或者在一定范围内拖动

作者: 谜之龙 | 来源:发表于2018-03-13 15:01 被阅读0次
    public class Main2Activity extends AppCompatActivity {
    View view1;
    int y1 = 0;
    int newY=0;
    int dY=0;
    int dX=0;
    int newX=0;
    int x1 = 0;
    private ImageView image;
    //这里是防止控件移动到自己不想去的地方,如果不需要些0或者去掉
    int imageHight;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        image = (ImageView) findViewById(R.id.image);
        view1=findViewById(R.id.text2);
        image.post(new Runnable() {
            @Override
            public void run() {
                imageHight=image.getHeight();
            }
        });
        image.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                MetTouchLeftClick(motionEvent);
                return true;
            }
        });
    }
    
    private Rect mChangeImageBackgroundRect = null;
    private boolean isInChangeImageZone(View view, int x, int y) {
        if (null == mChangeImageBackgroundRect) {
            mChangeImageBackgroundRect = new Rect();
        }
        view.getDrawingRect(mChangeImageBackgroundRect);
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        mChangeImageBackgroundRect.left = location[0];
        mChangeImageBackgroundRect.top = location[1];
        mChangeImageBackgroundRect.right = mChangeImageBackgroundRect.right + location[0];
        mChangeImageBackgroundRect.bottom = mChangeImageBackgroundRect.bottom + location[1];
        return mChangeImageBackgroundRect.contains(x, y);
    }
    private void MetTouchLeftClick(MotionEvent event){
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                //当手指按下的时候
                x1 =(int) event.getRawX();
                y1 = (int) event.getRawY();
                break;
            case MotionEvent.ACTION_MOVE:
                newY=(int) event.getRawY();
                newX=(int) event.getRawX();
                dY=newY-y1;
                dX=newX-x1;
                int l=image.getLeft();
                int t=image.getTop();
                l+=dX;
                t+=dY;
                int r=l+image.getWidth();
                int b=t+image.getHeight();
                Log.e("移动","是是是=="+t);
                if (t>0&&t<view1.getTop()-imageHight){
                    image.layout(l,t,r,b);
                }
    
                x1=newX;
                y1=newY;
                break;
        }
    }
    }
    

    相关文章

      网友评论

          本文标题:android让控件在屏幕上自由拖动或者在一定范围内拖动

          本文链接:https://www.haomeiwen.com/subject/vxezfftx.html