qc60d-nh7ms.gif
public class MainActivity extends AppCompatActivity {
ImageView imageView;
//浮動(dòng)按鈕按下時(shí)x坐標(biāo)
private float downX;
//浮動(dòng)按鈕按下時(shí)y坐標(biāo)
private float downY;
/**
* 按下時(shí)浮層x坐標(biāo)
*/
float downViewX = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.iv_onTouch);
//獲取屏幕寬度
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);
final int with = outMetrics.widthPixels;
final int height = outMetrics.heightPixels;
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//返回false,是點(diǎn)擊事件祭务;返回true,不記為點(diǎn)擊事件 參考鏈接 https://blog.csdn.net/u014043113/article/details/74778414
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//按下
downX = event.getX();
downY = event.getY();
downViewX = imageView.getX();
return true;
case MotionEvent.ACTION_MOVE:
//移動(dòng)
//移動(dòng)的距離
float moveX = event.getX() - downX;// event.getX() 移動(dòng)的X距離
float moveY = event.getY() - downY;// event.getY() 移動(dòng)的Y距離
//當(dāng)前view= X,Y坐標(biāo)
float viewX = imageView.getX();
float viewY = imageView.getY();
//view的寬高
int viewHeigth = imageView.getWidth();
int viewWidth = imageView.getHeight();
//X當(dāng)超出屏幕,取最大值
if (viewX + moveX + viewWidth > with) {
//靠右
imageView.setX(with - viewWidth);
} else if (viewX + moveX <= 0) {
//靠右
imageView.setX(0);
} else {
//正常
imageView.setX(viewX + moveX);
}
//Y當(dāng)超出屏幕,取最大值
if (viewY + moveY + viewHeigth > height) {
//靠下
imageView.setY(height - viewHeigth);
} else if (viewY + moveY <= 0) {
//靠上
imageView.setY(0);
} else {
//正常
imageView.setY(viewY + moveY);
}
return true;
case MotionEvent.ACTION_UP:
//松手
float upX = imageView.getX();
//屏幕中心點(diǎn)
float center = with / 2;
if (imageView.getX() > center) {
//靠右
imageView.setX(with - imageView.getWidth());
} else {
imageView.setX(0);
}
//按下時(shí)與松手時(shí)X值一致的話,就干點(diǎn)別的事情
if (downViewX == upX) {
return false;
} else {
return true;
}
}
return false;
}
});
}
}