2012-02-23 6 views
2

레이아웃이있는 활동에 ImageViewTextView이 있습니다. ImageViewTextvVew은 이미지와 그 사람의 이름을 각각 표시합니다. 사용자의 손가락 제스처와 관련하여 오른쪽에서 왼쪽으로 그리고 다른 방법으로 바꿔야합니다. 같은 시간에 이름과 이미지를 적절하게 변경해야합니다. 이것을 구현할 방법이 있습니까? 누군가가 나에게 안드로이드 개발을 처음 접했을 때 작성된 튜토리얼을 알릴 수 있다면 좋을 것이다.안드로이드에서 손가락 제스쳐로 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

을 검출 제스처에 대해이 작업을 사용합니다. 다음 예를 참조하십시오 http://www.hascode.com/2010/05/creating-a-simple-gesture-app-with-android/

+0

AndroDev에게 답변 해 주셔서 감사합니다. 맞습니다. 실제로 두 답이 모두 정확합니다. – Sha

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

+0

Sankar에게 감사의 답변을 전합니다. 실제로 두 답이 모두 정확합니다. – Sha

+0

두 가지 답변을 수락 할 수 없습니까? – Sha