.xml
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:id="@+id/button_id"
android:text="我是按钮"/>
.Java
public class MainActivity extends AppCompatActivity {
private LinearLayout.LayoutParams layoutParams;
private Button button;
private int height;
private int width;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button_id);
width = button.getWidth();
height = button.getHeight();
//获取布局参数
layoutParams = (LinearLayout.LayoutParams) button.getLayoutParams();
//按钮调用触碰监听
button.setOnTouchListener(new View.OnTouchListener() {
private int y;
private int x;
private int ry;
private int rx;
//调用触碰方法
@Override
public boolean onTouch(View v, MotionEvent event) {
//手指按下获取手指相对于控件的坐标
if (MotionEvent.ACTION_DOWN == event.getAction()) {
x = (int) event.getX();
y = (int) event.getY();}
//手指移动获取手指相对于屏幕的坐标
if (MotionEvent.ACTION_MOVE == event.getAction()) {
rx = (int) event.getRawX();
//高度减去状态栏的高度(状态栏高度不手机不一样 值不一样)
ry = (int) event.getRawY()-126;
//移动时两个坐标相减获取差值,重新赋值给控件的margin
layoutParams.setMargins(rx - x, ry - y, rx - x + width, ry - y +height);
button.setLayoutParams(layoutParams);}
return true;}
});
}
}