Reputation: 103
I want to get user finger location on screen so
that to perform some actions like increase the volume when the user moves her finger upward but the problem I am facing that the code I want to run on user upward movement calls many times the even user just place her finger on screen any one can help me
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;
}
});
any one give me good suggestions that what should I do
Upvotes: 1
Views: 46
Reputation: 1650
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);
}
}
You can use the above code in your application to track:
Upvotes: 1