2012-02-23 81 views
2

我有一个布局活动,其中包含一个ImageViewTextViewImageViewTextvVew分别用于显示人的图像和名称。我需要从右到左交换,以及相对于用户手指手势的其他方式。同时,名称和图像必须相应更改。 有没有一种方法来实现这一点?如果有人能够让我知道一个关于这方面的教程,那将是一件好事,因为我是Android开发的新手。如何在Android中使用手指手势交换Imageview和TextView

谢谢。

我尝试了以下方法,但没有检测到任何手势。

MyGroupActivity.java

import goldenOld.pkg.R; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.GestureDetector.OnGestureListener; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.MotionEvent; 
import android.widget.Toast; 

public class MyGroupActivity extends Activity implements OnGestureListener{ 

private static final int SWIPE_MIN_DISTANCE = 120; 
private static final int SWIPE_MAX_OFF_PATH = 250; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tab_mygroup); 
} 

public boolean onDown(MotionEvent arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    Toast mToast2 = Toast.makeText(getApplicationContext(), "Fling", Toast.LENGTH_SHORT); 
    mToast2.show(); 
    try { 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
      return false; 
     // right to left swipe 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show(); 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show(); 
     } 
     else if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      Toast.makeText(getApplicationContext(), "Swipe up", Toast.LENGTH_SHORT).show(); 
     } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      Toast.makeText(getApplicationContext(), "Swipe down", Toast.LENGTH_SHORT).show(); 
     } 
    } catch (Exception e) { 
     // nothing 
     Toast mToast = Toast.makeText(getApplicationContext(), "Exception", Toast.LENGTH_SHORT); 
     mToast.show(); 
    } 

    return true; 

} 

public void onLongPress(MotionEvent arg0) { 
    Toast mToast = Toast.makeText(getApplicationContext(), "Long Press", Toast.LENGTH_SHORT); 
    mToast.show(); 
} 

public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, 
     float arg3) { 
    // TODO Auto-generated method stub 
    return false; 
} 

public void onShowPress(MotionEvent arg0) { 
    // TODO Auto-generated method stub 

} 

public boolean onSingleTapUp(MotionEvent arg0) { 
    Toast mToast = Toast.makeText(getApplicationContext(), "Single Tap", Toast.LENGTH_SHORT); 
    mToast.show(); 
    return true; 
} 

public class MyGestureDetector extends SimpleOnGestureListener { 

    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     Toast mToast = Toast.makeText(getApplicationContext(), "Fling", Toast.LENGTH_SHORT); 
     mToast.show(); 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 

      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       //do what you want on left swipe 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       //do what you want on right swipe 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 

    public boolean onSingleTapUp(MotionEvent arg0) { 
     Toast mToast = Toast.makeText(getApplicationContext(), "Single Tap", Toast.LENGTH_SHORT); 
     mToast.show(); 
     return true; 
    } 

} 

} 

回答

1

你将不得不使用姿势检测你的目的。请参见下面的例子:

还要注意的是onFling()是回调方法,当你的活动检测到任何动作将被调用。所以在这里,只有你必须编写你的逻辑来检测用户正在刷什么方向。

+0

谢谢AndroDev的回答,这是正确的。其实这两个答案都是正确的。 – Sha 2012-02-24 02:28:48

5

我用这个手势检测

public class MyGestureDetector extends SimpleOnGestureListener { 

     private static final int SWIPE_MIN_DISTANCE = 120; 
     private static final int SWIPE_MAX_OFF_PATH = 250; 
     private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      try { 
       if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
        return false; 

       if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        //do what you want on left swipe 
       } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        //do what you want on right swipe 
       } 
      } catch (Exception e) { 
       // nothing 
      } 
      return false; 
     } 

    } 
+0

一旦检查您是否以正确方式应用该活动的手势,为什么因为它对我有用。 – sankar 2012-02-23 14:51:57

+0

谢谢Sankar的回答,这是正确的。其实这两个答案都是正确的。 – Sha 2012-02-24 02:28:26

+0

我们不能接受两个答案吗? – Sha 2012-02-24 02:31:41