Android 自定义可拖动悬浮按钮的实现步骤如下:
1. 创建一个自定义的 View,继承自 View 或者 ImageButton。
2. 在 View 中实现 onTouchEvent 方法,处理触摸事件,实现拖动功能。
3. 在 View 中实现 onDraw 方法,绘制悬浮按钮的样式。
4. 在 Activity 中添加该 View,并设置其 LayoutParams,使其可以悬浮在屏幕上。
5. 在 View 中添加点击事件,实现点击悬浮按钮后的操作。
6. 可以添加动画效果,使悬浮按钮更加生动。
下面是一个简单的实现示例:
```
public class FloatButton extends ImageButton {
private int lastX;
private int lastY;
public FloatButton(Context context) {
super(context);
}
public FloatButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FloatButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getRawX();
int y = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = x;
lastY = y;
break;
case MotionEvent.ACTION_MOVE:
int dx = x - lastX;
int dy = y - lastY;
int left = getLeft() + dx;
int top = getTop() + dy;
int right = getRight() + dx;
int bottom = getBottom() + dy;
layout(left, top, right, bottom);
lastX = x;
lastY = y;
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制悬浮按钮的样式
}
public void setFloatButtonClickListener(OnClickListener listener) {
setOnClickListener(listener);
}
}
```
在 Activity 中添加该 View:
```
FloatButton floatButton = new FloatButton(this);
floatButton.setImageResource(R.drawable.float_button);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
layoutParams.gravity = Gravity.TOP | Gravity.START;
layoutParams.x = 0;
layoutParams.y = 0;
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(floatButton, layoutParams);
```
添加点击事件:
```
floatButton.setFloatButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 点击悬浮按钮后的操作
}
});
```
添加动画效果:
```
ObjectAnimator animatorX = ObjectAnimator.ofFloat(floatButton, "translationX", 0, 100, -100, 0);
animatorX.setDuration(2000);
animatorX.setRepeatCount(ValueAnimator.INFINITE);
animatorX.start();
```