2017-08-27 12 views
1
I want to get user finger location on screen so 

在于,当 用户向上移动她的手指,但执行像增加音量一些动作,我面临着 问题我想在用户运行的代码向上移动调用多次 偶数用户只需将她在屏幕上的手指的任何一个可以帮助我触摸监听器在屏幕上得到用户的运动,但有一个问题是,条件称为大量时间

layout.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: { 
       // store the X value when the user's finger was pressed down 
       downXValue = event.getX(); 
       downYValue = event.getY(); 
       Log.d("recording", "= " + downYValue); 
       break; 
      } 

      case MotionEvent.ACTION_MOVE: { 
       // Get the X value when the user released his/her finger 
       float currentX = event.getX(); 
       float currentY = event.getY(); 
       // check if horizontal or vertical movement was bigger 

       if (Math.abs(downXValue - currentX) > Math.abs(downYValue 
         - currentY)) { 
        Log.d("recording", "x"); 
        // going backwards: pushing stuff to the right 
        if (downXValue < currentX) { 
         Log.d("recording", "right"); 

        } 

        // going forwards: pushing stuff to the left 
        if (downXValue > currentX) { 
         Log.d("recording", "left"); 

        } 

       } else { 
        Log.d("recording", "y "); 

        if (downYValue < currentY) { 
         Log.d("recording", "down"); 




         } 
        } 
        if (downYValue > currentY) { 
         Log.d("recording", "up"); 




        } 
       } 
       break; 
      } 

     } 

     return true; 

    } 


}); 

任何人给我很好的建议,我该怎么办

回答

1

CUSTOME GESTURE LISTENER

import android.util.Log; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 


public class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener { 
    private static final String TAG = "SimpleGestureListener"; 
    private Listener mListener; 

    @Override 
    public boolean onDown(MotionEvent e) { 
     return true; 
    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     Log.i(TAG,e1.toString()+"\n"+e2.toString()); 
     Log.d(TAG,"distanceX = "+distanceX+",distanceY = "+distanceY); 
     if (mListener == null) 
      return true; 

     if (distanceX == 0 && Math.abs(distanceY) > 1){ 
      mListener.onScrollVertical(distanceY); 
     } 

     if (distanceY == 0 && Math.abs(distanceX) > 1){ 
      mListener.onScrollHorizontal(distanceX); 
     } 
     return true; 
    } 


    public void setListener(Listener mListener) { 
     this.mListener = mListener; 
    } 

    interface Listener{ 
     /** 
     * left scroll dx >0 
     * right scroll dx <0 
     * @param dx 
     */ 
     void onScrollHorizontal(float dx); 

     /** 
     * upward scroll dy > 0 
     * downward scroll dy < 0 
     * @param dy 
     */ 
     void onScrollVertical(float dy); 
    } 
} 

用法

public class MainActivity extends AppCompatActivity { 
    private static final String TAG = "MainActivity"; 
    private GestureDetector mDetector; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     SimpleGestureListener simpleGestureListener = new SimpleGestureListener(); 
     simpleGestureListener.setListener(new SimpleGestureListener.Listener() { 
      @Override 
      public void onScrollHorizontal(float dx) { 
       Log.i(TAG,"horizontal = " +dx); 
      } 

      @Override 
      public void onScrollVertical(float dy) { 
       Log.i(TAG,"vertical = " +dy); 
      } 
     }); 
     mDetector = new GestureDetector(this, simpleGestureListener); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     mDetector.onTouchEvent(event); 
     return super.onTouchEvent(event); 
    } 
} 

您可以在应用程序中使用上面的代码追踪:

  1. 左右轻扫
  2. 顶向下轻扫
+0

与我的代码相同的情况下,我希望用户移动调用多次的代码代码 –

+0

使用您的代码条件调用几乎约6至7次只需滑动 –

+0

并在我的情况下,我想要应用用户手指在同一动作的两种不同布局上移动并执行不同的任务 –

相关问题