Android Studio
(Android Studio) 두번 터치(onDoubleTap) 예제
SAFE
2016. 5. 16. 18:40
다른 사이트 :
http://technote.kr/67
아래가 예술..
출처(出處) : http://blog.csdn.net/nizhuanxingheit/article/details/48716769
중국어로 된 사이트에서 예제를 찾았다.
더블터치를 안드로이드에서 구현하려면 더블탭이란걸 써야한다.
잘 돌아가더라.. ㄷㄷ
MyButton.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | public class MyButton extends Button { private GestureDetector mGesture; private OnDoubleClickListener onDoubleClickListener; //自定义监听器接口 interface OnDoubleClickListener{ void onDoubleClick(View view); } //设置双击事件监听器的方法 public void setOnDoubleClickListener(OnDoubleClickListener onDoubleClickListener){ this.onDoubleClickListener = onDoubleClickListener; }; public MyButton(Context context) { super(context); } public MyButton(final Context context, AttributeSet attrs) { super(context, attrs); // mGesture = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){ @Override public boolean onDoubleTap(MotionEvent e) { if(onDoubleClickListener!=null) { onDoubleClickListener.onDoubleClick(MyButton.this); } Toast.makeText(context,"双击事件",Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { /** * 滑动和拖拽最好不要一起实现,会产生矛盾 */ if(Math.abs(e1.getX()-e2.getX())>50){ setTranslationX(e2.getX() - e1.getX()); //根据手势滑动的距离而在水平方向上滑动控件 ObjectAnimator.ofFloat(MyButton.this,"translationX",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(getTranslationX()+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) { if(event.getAction()==MotionEvent.ACTION_DOWN){ } return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { //touch事件传给onTouchEvent() mGesture.onTouchEvent(event); return super.onTouchEvent(event); } } | cs |
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class MainActivity extends Activity { private MyButton myButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myButton = (MyButton) findViewById(R.id.button_doubleTap); myButton.setOnDoubleClickListener(new MyButton.OnDoubleClickListener() { @Override public void onDoubleClick(View view) { Log.d("","点击两次"); } }); } } | cs |
Activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.example.administrator.selfishgroupview.MyButton android:id="@+id/button_doubleTap" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击"/> </RelativeLayout> | cs |