public class MyButton extends Button {
private GestureDetector mGesture;
interface onDoubleClick{
public void onDoubleClick(View v);
}
private onDoubleClick onDoubleClickLisnter;
public void setOnDoubleClickLisnter(onDoubleClick onDoubleClickLisnter) {
this.onDoubleClickLisnter = onDoubleClickLisnter;
}
public MyButton(Context context) {
super(context);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
mGesture=new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){
// 双击事件
@Override
public boolean onDoubleTap(MotionEvent e) {
if (onDoubleClickLisnter!=null){
onDoubleClickLisnter.onDoubleClick(MyButton.this);
}
Log.d("ontouch", "点了两下 ");
return true;
}
// 拖动停止后才滑动
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (Math.abs(e2.getX()-e1.getX())>50){
setTranslationX(getTranslationX()+e2.getX()-e1.getX());
ObjectAnimator.ofFloat(MyButton.this,"translationX",getTranslationX(),getTranslationX()+e2.getX()-e1.getX()).setDuration(3000).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.getY());
return super.onScroll(e1, e2, distanceX, distanceY);
}
});
}
public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
return super.dispatchTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mGesture.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
onFling的效果图
onScroll的效果图