点击控件跟随鼠标移动

1.创建一个类MyButton继承Button

@SuppressLint("AppCompatCustomView")
public class MyButton extends Button {
    private GestureDetector gestureDetector;

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

    //写一个接口,定义一个双击的未实现方法
    interface onDoubleClick {
        public void onDoubleClick(View v);
    }

    private onDoubleClick onDoubleClickListener;
    //给接口实例一个setter方法
    public void setOnDoubleClickListener(onDoubleClick onDoubleClickListener) {
        this.onDoubleClickListener = onDoubleClickListener;
    }

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);

        gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onDoubleTap(MotionEvent e) {
                if (onDoubleClickListener != null) {
                    onDoubleClickListener.onDoubleClick(MyButton.this);
                }
                return true;
            }

            //滑动
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                if (Math.abs(e2.getX() - e1.getX()) > 50) {
                    ObjectAnimator.ofFloat(MyButton.this, "TranslationX", getTranslationX(), getTranslationX() + e2.getX() - e1.getX())
                            .setDuration(500)
                            .start();
                    return true;
                }
                return super.onFling(e1, e2, velocityX, velocityY);
            }

            //拖动
            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                setTranslationX(getTranslationX() + e2.getX() - e1.getX());
                setTranslationY(getTranslationY() + e2.getY() - e1.getX());
                return true;
            }
        });
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        gestureDetector.onTouchEvent(event);//让手势监听处理
        return super.onTouchEvent(event);
    }
}


2.主布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="comqq.example.hasee.myapplication.MainActivity">


       <comqq.example.hasee.myapplication.MyButton
           android:text="侯志杨是傻逼"
           android:id="@+id/button"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerInParent="true" />
        


</LinearLayout>


3.主函数

public class MainActivity extends AppCompatActivity {
    private Button but1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MyButton button= (MyButton) findViewById(R.id.button);
        button.setOnDoubleClickListener(new MyButton.onDoubleClick() {
            @Override
            public void onDoubleClick(View v) {
                Toast.makeText(MainActivity.this, "你双击了这个按钮!", Toast.LENGTH_SHORT).show();
            }
        });

    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值