Android 自定义可拖动悬浮按钮

个人中心

DownLoad

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();
```

猜你喜欢

转载自blog.csdn.net/YDHIT/article/details/130842770