package com.xunao.effectdemo.dragview;

import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.RelativeLayout;

import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;

/**
 * author : 程中强
 * e-mail : 740479946@qq.com
 * date : 2022/8/1013:27
 * desc :
 * version: 1.0
 */
public class DragView extends RelativeLayout {

	public DragView(Context context) {
		super(context);
	}

	public DragView(Context context, @Nullable AttributeSet attrs) {
		super(context, attrs);
	}

	public DragView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
	}

	@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
	public DragView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
		super(context, attrs, defStyleAttr, defStyleRes);
	}

	private float downX;
	private float downY;

	private long downTime;

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		super.onTouchEvent(event);
		if (this.isEnabled()) {
			switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					downX = event.getX();
					downY = event.getY();
					break;
				case MotionEvent.ACTION_MOVE:
					final float xDistance = event.getX() - downX;
					final float yDistance = event.getY() - downY;
					if (xDistance != 0 && yDistance != 0) {
						int l = (int) (getLeft() + xDistance);
						int r = (int) (getRight() + xDistance);
						int t = (int) (getTop() + yDistance);
						int b = (int) (getBottom() + yDistance);
						this.layout(l, t, r, b);

					}
					break;
				case MotionEvent.ACTION_UP:
					setPressed(false);
					break;
				case MotionEvent.ACTION_CANCEL:
					setPressed(false);
					break;
				default:
					break;
			}
			return true;
		}
		return false;
	}
}
